У меня было много ограничений на одно свойство, например:
@NotEmpty
@Size(min = 2, max = 20)
@Pattern(regexp= "^[0-9a-z_A-Z\u4e00-\u9fa5]+$")
private String username;
но, когда он работает, он будет проверять все ограничения, и я просто хочу проверить шаг за шагом, так как я могу это сделать? и я нашел специальное ограничение, то есть ограничение @Email, мне это нравится:
@NotEmpty
@Email
private String email;
Я обнаружил, что он будет проверять шаг за шагом, если проверка ограничения @NotEmpty завершилась неудачно, он не будет проверять ограничение @Email, я просто нашел, что @Email имеет функцию, я хочу сказать, что есть некоторые особенности для @Email?
Это так смутно для меня, и я надеялся, что кто-то может мне помочь, спасибо.
Похоже, вы должны изучить создание пользовательского валидатора.
вот хороший пример того, как настроить базовый пользовательский валидатор (перейдите в раздел "Реализованные пользовательские проверки", особенно так, как они делают EmployeeFormValidator): http://www.journaldev.com/2668/spring-mvc-form-validation -example-используя-аннотаций-и-заказ валидатор-реализация
Создайте собственный заказ, который вы хотите иметь, а затем просто привяжите его в своем контроллере к ожидаемому объекту (или вызовите функцию проверки.
Если вы собираетесь использовать JSR-303, это то, что вы делаете в своем коде и настраиваемом валидаторе, вам нелегко контролировать порядок проверки. Поэтому лучше преобразовать все эти проверки в пользовательский валидатор, это намного более гибко.
(1) Реализует интерфейс валидатора Spring
public XXXValidator implements Validator {
@Autowired MessageSource messageSource
public boolean supports(Class clazz) {
return XXXX.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
//do your validation here
if(....){
e.rejectValue(..,..,messageSource.getMessage(...),..,..)
}
}
}
(2) в контроллере
XXXValidator validator=new XXXValidator ();
@RequestMapping(...,....)
public String handlePostMethodExample(@ModelAndAttribute XXX xxx,BindingResult error)
validator.validate({instance of XXX object here});
if(error.hasErrors(){
//handle error here
}
}