Spring MVC имеет возможность автоматически проверять @Controller
входы. В предыдущих версиях это было до разработчика, чтобы вручную
вызвать логику проверки.
Но в вашем случае вы пытаетесь проверить объект DTO, в этом случае springboot может не привязывать ваш валидатор к вашей модели автоматически и вызывать validator. Так что в этом случае вам нужно будет вручную связать объект в валидатор.
или вы можете вручную вызвать валидатор для bean-компонента, например:
@AutoWired
Validator validator;
...
validator.validate(book);
Вы можете определить собственный валидатор в springboot для классов модели, если хотите, и использовать аннотации:
@Documented
@Constraint(validatedBy = CustomDataValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomDataConstraint {
String message() default "Invalid data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
и затем определите класс валидатора, например:
public class CustomDataValidator implements
ConstraintValidator<CustomDataConstraint, String> {
@Override
public void initialize(CustomDataConstraint data) {
}
@Override
public boolean isValid(String field,
ConstraintValidatorContext cxt) {
return field!= null;
}
}
Ваш класс валидатора должен реализовывать интерфейс ConstraintValidator
и должен реализовывать метод isValid
для определения правил валидации, определения правил валидации могут быть любыми. Затем вы можете просто добавить аннотацию к своему полю, например: :
@CustomDataConstraint
private String name;