Spring Validation
Validation в Spring-boot(Hibernate Validation)
Добавление зависимости
implementation 'org.springframework.boot:spring-boot-starter-validation:3.2.2'
Без Spring boot нужно добавить только зависимость:
implementation 'org.hibernate:hibernate-validator:8.0.1.Final'
Добавление @Valid на переменную
@Valid User user
Добавить Аннотации на поля класса @NotNull, @NotEmpty etc.
Добавить Exception Handlers для обработки исключения.
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, String> handleValidationExceptions(
MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return errors;
}
Аннотации
Аннотации общие:
- Valid - для проверки всего объекта. Также необходима для запуска проверки вложенных свойств.
//пример проверки вложенных свойств
@Valid
@NotNull(groups = AdvanceInfo.class)
private UserAddress useraddress;
- Validated - для группового уровня. Что дает возможность выбирать группы проверок. Также применяется
на контроллер, если нужно валидация на RequestParam.
//объявление
@NotNull(groups = BasicInfo.class)
private String password;
//указание проверки
@Validated(BasicInfo.class) UserAccount useraccount,
Аннотации проверок:
- @NotNull - поле не может быть null.
@NotNull(message = "Name is mandatory.")
private String name;
@NotEmpty - применяется к CharSequence, Collection, Map или Array и проверяет, что он не null имеет
размер больше 0.
@NotBlank - применяется к String - должен иметь больше хотя бы один символ. Аннотация @Size(min=6)
пропустит строку состоящую из 6 пробелов и/или символов переноса строки, а @NotBlank не пропустит.
@Size - применяется к CharSequence, Collection проверяет размер - size.
@NotEmpty(message = "Name may not be empty")
@Size(min = 2, max = 32, message = "Name must be between 2 and 32 characters long")
private String name;
@Min and @Max: - только для числительных переменных.
@DecimalMax and @DecimalMin - проверка на лимиты для Decimal, BigDecimal и тд. Пример - @DecimalMax("20.0").
@Pattern: to say that a string field is only valid when it matches a certain regular expression.
@Email: to say that a string field must be a valid email address.
@Past - проверяет LocalDateTime на то что дата в прошлом.
Проверки разных типов: