Java Spring Hibernate验证器逐步检查
我对单个属性有很多限制,如下所示:Java Spring Hibernate验证器逐步检查,java,spring,spring-mvc,hibernate-validator,spring-validator,Java,Spring,Spring Mvc,Hibernate Validator,Spring Validator,我对单个属性有很多限制,如下所示: @NotEmpty @Size(min = 2, max = 20) @Pattern(regexp= "^[0-9a-z_A-Z\u4e00-\u9fa5]+$") private String username; @NotEmpty @Email private String email; 但是,当它工作时,它将检查所有约束,我只想一步一步地检查,那么我该怎么做呢?我发现了一个特殊的约束,那就是@Email约束,我喜欢这样: @NotEmpty @Si
@NotEmpty
@Size(min = 2, max = 20)
@Pattern(regexp= "^[0-9a-z_A-Z\u4e00-\u9fa5]+$")
private String username;
@NotEmpty
@Email
private String email;
但是,当它工作时,它将检查所有约束,我只想一步一步地检查,那么我该怎么做呢?我发现了一个特殊的约束,那就是@Email约束,我喜欢这样:
@NotEmpty
@Size(min = 2, max = 20)
@Pattern(regexp= "^[0-9a-z_A-Z\u4e00-\u9fa5]+$")
private String username;
@NotEmpty
@Email
private String email;
我发现它会一步一步地检查,如果@NotEmpty约束检查失败,它不会检查@Email约束,我只是发现@Email有这个功能,我想说,@Email有什么特别之处
这让我很困惑,我希望有人能帮助我,谢谢。听起来你应该考虑创建一个自定义验证器 下面是一个关于如何设置基本自定义验证器的好例子(请转到“自定义验证器实现”一节,特别是它们执行EmployeeFormValidator的方式):
在其中创建一个您想要的自定义顺序,然后将其绑定到您的控制器中,与预期对象相对应(或者调用validate函数。如果您要使用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
}
}