Как проверить список таким образом, чтобы все элементы данных присутствовали в запросе с использованием javax.validation?

#java #spring #spring-boot #spring-validator

#java #spring #spring-boot #spring-validator

Вопрос:

Я изучаю проверку Spring Boot bean и хотел реализовать пользовательскую проверку в списке, присутствующем в родительском объекте, таким образом, чтобы в ответ отправлялась более точная ошибка. Пожалуйста, предложите решение.Заранее спасибо.

У меня есть класс Pojo-кандидата следующим образом

 @Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Applicant{
    @NotEmpty (message="name is mandatory")
    private String name;
    @NotEmpty (message="addresses is mandatory")
    @Valid
    private List<Address> addresses;
}
  

Класс адреса выглядит следующим образом.

 @Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address{
    @NotEmpty  (message="Line1 is mandatory")
    private String line1;
    @NotEmpty (message="Line2 is mandatory") 
    private String line2;
    @NotEmpty (message="pinCode is mandatory")
    private String pinCode;
}
  

Примерное тело запроса для класса-кандидата выглядит следующим образом

 {
  "name":"hello",
  "addresses":[{
    "line1":"Line1",
    "pinCode":"pinCode"
  },
  {
    "line2":"Line2",
    "pinCode":"pinCode"
  }]
}
  

Вывод с использованием проверки по умолчанию выглядит следующим образом.

 {
    "timestamp": "2020-08-15T09:29:30.807 0000",
    "status": 400,
    "errors": [
        "Line2 is mandatory",
        "Line1 is mandatory"
    ]
}
  

Я хочу реализовать пользовательскую проверку таким образом, чтобы результат был следующим.

 {
    "timestamp": "2020-08-15T09:29:30.807 0000",
    "status": 400,
    "errors": [
        "Line2 is mandatory in record 1 of addresses",
        "Line1 is mandatory in record 1 of addresses"
    ]
}
  

«Строка 2 обязательна в записи 1 адресов» будет указывать на то, что запись 1 в массиве адресов Json является обязательной, а тег отсутствует в теле запроса.

Комментарии:

1. Сообщение по умолчанию довольно хорошо выглядит следующим образом

2. проверьте эту статью на наличие пользовательских средств проверки baeldung.com/spring-validate-list-controller

Ответ №1:

Я добавил код в репозиторий — https://github.com/greenlearner01/rest-api-validation/tree/master/userManagementApp

Теперь сообщение об ошибке будет выглядеть следующим образом (это не совсем то же самое, что вы просили, но я думаю, что очень близко)-

  {
   "status": "BAD_REQUEST",
   "errors": [
     "addresses[2].line1:must not be null",
     "addresses[2].line2:must not be null",
     "addresses[0].line1:must not be null",
     "addresses[1].line2:must not be null"
   ],
   "timestamp": "2020-08-15T17:52:31.138",
   "path": "uri=/user"
 }
  

Здесь важно добавить @ControllerAdvice, где обрабатывается исключение ConstraintViolationException.