Spring @NotNull ограничение проверки для списка объектов не отображает имя требуемого элемента - PullRequest
0 голосов
/ 25 сентября 2019

Я использую аннотацию @NotNull в моем DTO, чтобы проверить, что какое-то поле не должно быть пустым.

Точно так же:

@NotEmpty
private String exampleField;

And I am getting the next error message:

{
"error": {
    "errorCode": "400",
    "message": "[must not be empty]",
    "id": "249ac058-dde9-497f-8a33-66730a4acb6a",
    "time": 1569366486479
},
"status": 400
}

Проблема в том, что яне получено имя элемента в ответе об ошибке.Я думаю, что это потому, что в этом запросе у меня есть список моего DTO.Просто так:

List<ChildDTO> child)

Потому что в другой службе только один объект в запросе. Просто так:

ChildDTO child

У меня есть ответ:

{
    "errorCode": "400",
    "message": "{exampleField=[must not be empty]}",
    "id": "4f6add3d-ed47-4b4c-b5a7-90c740407aae",
    "time": 1569366693073
}

Я думаю, что когда я отправляю список объектов, и одно из этих полей имеет эту проверку, что-то происходит, и имя элемента теряется в конечном сообщении.

Это методы, которые используют DTO:

@PostMapping(CHILD_PATH)
@Validated(OnCreationRequest.class)
@ResponseStatus(HttpStatus.CREATED)
public ChildDTO register(@RequestBody @Valid ChildDTO CHILD) {
    return CHILDService.saveCHILD(CHILD);
}

@PostMapping(CHILD_REGISTER_PATH_LIST)
@Validated(OnCreationRequest.class)
@ResponseStatus(HttpStatus.CREATED)
public boolean registerAll(@RequestBody @Valid List<ChildDTO> CHILDs) {
    return CHILDService.saveAllCHILDs(CHILDs);
}

Проблема во втором, потому что у меня есть список:

List<ChildDTO> CHILDs

Есть идеи?

1 Ответ

0 голосов
/ 25 сентября 2019

Создайте другой класс как Children и объявите List<ChildDTO> как @NotNull.

class Children {

    @NotNull
    private List<ChildDTO> children;

    /**
     * getters & setters
     */
}

Обновите функцию контроллера с помощью Children class.

@PostMapping(CHILD_REGISTER_PATH_LIST)
@Validated(OnCreationRequest.class)
@ResponseStatus(HttpStatus.CREATED)
public boolean registerAll(@RequestBody @Valid Children children) {
    return CHILDService.saveAllCHILDs(children);
}
...