Пошаговая проверка Spring Hibernate Validator

У меня было много ограничений на одно свойство, например:

@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?

Это так запутано для меня, и я надеялся, что кто-то может мне помочь, спасибо.


person Rocky Hu    schedule 27.11.2014    source источник


Ответы (2)


Похоже, вам следует подумать о создании собственного валидатора.

вот хороший пример того, как настроить базовый настраиваемый валидатор (перейдите в раздел «Реализации настраиваемых валидаторов», особенно то, как они работают с EmployeeFormValidator): http://www.journaldev.com/2668/spring-mvc-form-validation-example-using-annotation-and-custom-validator-implementation

Создайте там пользовательский порядок, который вы хотите иметь, а затем просто привяжите его в своем контроллере к ожидаемому объекту (или вызовите функцию проверки.

person Aeseir    schedule 28.11.2014

Если вы собираетесь использовать 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
  }
}
person CE ZHANG    schedule 28.11.2014