#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.