Я думаю, причина в том, что ServletRequestDataBinder
(расширяет DataBinder) не имеет экземпляра org.springframework.validation.Validator
, поэтому он ничего не проверяет (для проверки аннотированного компонента @Valid у вас должен быть экземпляр javax.validation.Validator).
org.springframework.validation.DataBinder
public void validate() {
Validator validator = getValidator();
if (validator != null) {
validator.validate(getTarget(), getBindingResult());
}
}
Вы можете установить экземпляр Validator в @InitBinder
аннотированных методах: -
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(new MyValidator());
}
Можнотакже установите экземпляр валидатора в WebBindingInitializer .
StandardBindingInitializer
public class StandardBindingInitializer implements WebBindingInitializer {
@Autowired
private LocalValidatorFactoryBean validator;
public void setValidatorFactory(LocalValidatorFactoryBean validator) {
this.validator = validator;
}
@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.setValidator(validator);
}
}
Чтобы создать экземпляр LocalValidatorFactoryBean, используйте mvc: annotation-driven ИЛИ настроить LocalValidatorFactoryBean как bean .