Привет, у меня есть угловой пользовательский интерфейс, который использует остальные API, предоставляемые приложением весенней загрузки. из углового пользовательского интерфейса я выполняю вызов 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, и я вижу, что статусы и учетные записи пусты. !!!
ценю любую помощь большое спасибо.
Вам нужны методы установки для коллекций как объекта коллекции, а не для каждого объекта. У тебя есть
public void addStatus(UUID status) {
this.statuses.add(status);
}
Но Spring не знает, как установить uuids, если вы добавите сеттер для всей коллекции, он будет работать, например
public void setStatuses(List<UUID> statuses) {
this.statuses = statuses;
}
В дополнение к этому я также предлагаю вам создать конструктор, который содержит все поля класса, которые вы хотите установить. Таким образом, вам не нужны сеттеры, и класс будет содержать меньше шаблонов.