【问题标题】:Spring Hibernate Validator check step by stepSpring Hibernate Validator 一步一步检查
【发布时间】:2014-11-27 15:04:54
【问题描述】:

我对单个属性有很多限制,如下所示:

@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有什么特别之处吗?

我很困惑,希望有人能帮助我,谢谢。

【问题讨论】:

    标签: java spring spring-mvc hibernate-validator spring-validator


    【解决方案1】:

    听起来您应该考虑创建自定义验证器。

    这是一个关于如何设置基本自定义验证器的好例子(转到名为自定义验证器实现的部分,尤其是他们执行 EmployeeFormValidator 的方式): http://www.journaldev.com/2668/spring-mvc-form-validation-example-using-annotation-and-custom-validator-implementation

    在其中创建您想要的自定义排序,然后在控制器中将其与您的预期对象绑定(或调用验证函数。

    【讨论】:

      【解决方案2】:

      如果您要使用 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
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        相关资源
        最近更新 更多