Проверка Spring Hibernate Validator шаг за шагом

1

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

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

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

Теги:
spring
spring-mvc
hibernate-validator
spring-validator

2 ответа

0
Лучший ответ

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

вот хороший пример того, как настроить базовый пользовательский валидатор (перейдите в раздел "Реализованные пользовательские проверки", особенно так, как они делают EmployeeFormValidator): http://www.journaldev.com/2668/spring-mvc-form-validation -example-используя-аннотаций-и-заказ валидатор-реализация

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню