Validation 如何验证Springbean中的单个字段?
验证spring注释bean的首选方法似乎是使用@valid,如下面的代码块中所示,但是我希望每次显示一个字段的错误消息,仍然使用spring注释。我知道我可以在每个字段之后验证整个表单,并且只显示单个字段的消息,但这是低效的,有人知道更好的方法吗Validation 如何验证Springbean中的单个字段?,validation,spring-mvc,Validation,Spring Mvc,验证spring注释bean的首选方法似乎是使用@valid,如下面的代码块中所示,但是我希望每次显示一个字段的错误消息,仍然使用spring注释。我知道我可以在每个字段之后验证整个表单,并且只显示单个字段的消息,但这是低效的,有人知道更好的方法吗 @RequestMapping(value="/register",method=RequestMethod.POST) public @ResponseBody RegisterResponse registerSubmit(@Valid
@RequestMapping(value="/register",method=RequestMethod.POST)
public @ResponseBody RegisterResponse registerSubmit(@Valid @ModelAttribute("registerData") Register registerData, BindingResult result ){
RegisterResponse rr= new RegisterResponse();
if(!result.hasErrors()) {
rr.setStatus("SUCCESS");
rr.setResult(result);
}
else {
rr.setStatus("FAIL");
rr.setResult(result.getAllErrors());
}
return rr;
}
遇到第一个错误时从Validatorvalidate方法返回
为此
您需要有一个实现org.springframework.validation.Validator的自定义验证器,您可以控制按所需顺序验证字段,而,使用@Valid annotation将验证表单Bean中的所有字段,并返回所有字段的BindingResult。我能够通过过滤掉具有空/空字段的错误来实现这一点,这确实可行,但效率有点低,因为我们验证整个Bean,即使我们关心第一个字段。我很想听到一种更好的方法来完成这种一步一步的表单字段验证。 我用了如下的方法:
private List<ObjectError> removeEmpties(BindingResult result) {
List<ObjectError> errors = result.getAllErrors();
ArrayList<ObjectError> myErrors = new ArrayList<ObjectError>();
for(ObjectError error: errors){
FieldError realThing = (FieldError) error;
if (realThing.getRejectedValue()!=null && !realThing.getRejectedValue().toString().isEmpty()){
myErrors.add(error);
}
}
return myErrors;
}
您是否建议制作一个自定义验证器?我不确定我是否理解。我似乎找不到任何这样做的示例代码,我想应该有几行代码一次触发一个注释验证?为了清楚起见,我不想使用自定义验证代码,我仍然希望依赖注释,但每次只能得到一个结果。@BaradiBaradari AFAIK您不能在使用@Valid时截获验证过程。你所能做的就是从BindingResult中删除不需要的错误。试试这个:我不确定这是否有效。祝你好运!谢谢你Niranjan,我最终得到了一个有效的解决方案,尽管没有我想要的那么有效,见下面我的答案