我对单个属性有很多限制,比如:
@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有一些特别之处?
对我来说很困惑,我希望有人可以帮助我,谢谢。
答案 0 :(得分:0)
听起来你应该考虑创建一个自定义验证器。
这是一个关于如何设置基本自定义验证器的一个很好的示例(转到称为自定义验证器实现的部分,尤其是它们执行EmployeeFormValidator的方式): http://www.journaldev.com/2668/spring-mvc-form-validation-example-using-annotation-and-custom-validator-implementation
在那里创建一个你想拥有的自定义排序,然后将它在你的控制器中与你期望的对象绑定(或调用验证函数。
答案 1 :(得分: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
}
}