无法将请求参数绑定到spring mvc中的对象?

问题描述 投票:0回答:1

嗨,我有一个角度ui,它消耗了春季启动应用程序提供的休息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和请求方法getAllCampaignsUnpaginated

@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个回答
0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.