невозможно привязать параметры запроса к объекту весной MVC? - PullRequest
0 голосов
/ 18 апреля 2019

Привет, у меня угловой пользовательский интерфейс, который потребляет остальные API, предоставляемые приложением весенней загрузки.Исходя из углового интерфейса, я выполняю вызов API apte rest GET, однако параметры запроса не привязываются к объекту.ниже приведен мой запрос 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 и вижу, что статусы и учетные записи пусты.!!!

благодарю за любую помощь, большое спасибо.

1 Ответ

0 голосов
/ 18 апреля 2019

Вам нужны методы установки для коллекций как объекта коллекции, а не для каждого объекта. У вас есть

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

Но Spring не знает, как установить uuids, если вы добавите сеттер для всей коллекции, он будет работать, например

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

В дополнение к этому, я бы также предложил вам создать конструктор, который содержит все поля класса, который вы хотите установить. Таким образом, вам не нужны сеттеры, и класс будет содержать меньше шаблонов.

...