【问题标题】:unable to bind request parameters to the object in spring mvc?无法将请求参数绑定到spring mvc中的对象?
【发布时间】:2019-04-18 14:24:21
【问题描述】:

您好,我有一个 angular ui,它使用 spring boot 应用程序提供的 rest api。从角度 ui 我发出 GET rest api 调用,但是请求参数没有绑定到对象。以下是我的 GET 请求。

curl -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJjYW1wYWlnbm1hbmFnZXJAbG9jYWxob3N0IiwiYXV0aCI6IlJPTEVfQ0FNUEFJR05fTUFOQUdFUiIsImV4cCI6MTU1ODE4MzAyM30.OHSqVZ5c9-44SyyB_ykFqf9xC-06UvSv-F7UYLvrrK_YNJrqF3Mvuv8zvTrBqdMXRMBdCQNmitVQ38zdZxj3Tg"  http://localhost:8080/api/campaigns/unpaginated?statuses=357632f0-1afd-4af2-a8f2-3b964884bfb3&statuses=2f02e5f0-2d56-4583-a9db-f962becbd5f9&accounts=e15965cf-ffc1-40ae-94c4-b450ab190222

以下是我的 RestController 命名为 CampaignResource & request 方法 getAllCampaignsUnpagified

@RestController
@RequestMapping("/api")
public class CampaignResource { 
    /**
     * GET  /campaigns : get all the campaigns unpaginated.
     *
     * @return the ResponseEntity with status 200 (OK) and the list of campaigns in body
     */
    @GetMapping("/campaigns/unpaginated")
    @Timed
    @Secured({AuthoritiesConstants.GLOBAL_ADMIN, AuthoritiesConstants.ACCOUNT_ADMIN, AuthoritiesConstants.CAMPAIGN_MANAGER, AuthoritiesConstants.TEAM_MEMBER})
    public ResponseEntity<List<DropdownDTO>> getAllCampaignsUnpaginated(CampaignFilterRequest filter) {
        log.debug("REST request to get all Campaigns");
        return ResponseEntity.ok().body(campaignService.findAll(filter));
    }
}

以下是我想要绑定请求参数的 CampaignFilterRequest 类。

import com.google.common.collect.Lists;

    import java.time.ZonedDateTime;
    import java.util.List;
    import java.util.UUID;

    public class CampaignFilterRequest {

        private ZonedDateTime minStartDate;
        private ZonedDateTime maxEndDate;
        private List<UUID> types = Lists.newArrayList();
        private List<UUID> createdBy = Lists.newArrayList();
        private List<UUID> statuses = Lists.newArrayList();
        private List<UUID> accounts = Lists.newArrayList();

        public ZonedDateTime getMinStartDate() {
            return minStartDate;
        }
        public void setMinStartDate(ZonedDateTime minStartDate) {
            this.minStartDate = minStartDate;
        }
        public ZonedDateTime getMaxEndDate() {
            return maxEndDate;
        }
        public void setMaxEndDate(ZonedDateTime maxEndDate) {
            this.maxEndDate = maxEndDate;
        }
        public List<UUID> getStatuses() {
            return statuses;
        }
        public void addStatus(UUID status) {
            this.statuses.add(status);
        }
        public List<UUID> getTypes() {
            return types;
        }
        public void setTypes(List<UUID> types) {
            this.types = types;
        }
        public void addType(UUID type) {
            this.types.add(type);
        }
        public List<UUID> getCreatedBy() {
            return createdBy;
        }
        public void setCreatedBy(List<UUID> createdBy) {
            this.createdBy = createdBy;
        }
        public void addCreatedBy(UUID createdBy) {
            this.createdBy.add(createdBy);
        }
        public List<UUID> getAccounts() {
            return accounts;
        }
        public void addAccount(UUID accounts) {
            this.accounts.add(accounts);
        }
        public void setAccounts(List<UUID> accounts) {
            this.accounts = accounts;
        }
    }

我可以在 getAllCampaignsUnpaginated 上进行调试,我可以看到状态和帐户是空的。 !!!

感谢任何帮助 非常感谢。

【问题讨论】:

    标签: spring spring-mvc spring-rest


    【解决方案1】:

    您需要将集合的 setter 方法作为集合对象,而不是基于每个对象。你有

    public void addStatus(UUID status) {
        this.statuses.add(status);
    }
    

    但是 spring 不知道如何设置 uuid,例如,如果您为整个集合添加一个 setter 它将起作用,例如

    public void setStatuses(List<UUID> statuses) {
        this.statuses = statuses;
    }
    

    除此之外,我还建议您创建一个构造函数,其中包含您要设置的类的所有字段。这样您就不需要 setter,并且该类将包含更少的样板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多