似乎验证spring注释bean的首选方法是使用@valid,就像在下面的块中一样,但是我想一次使用Spring注释显示一个字段的错误消息。我知道我可以在每个字段后验证整个表单并仅显示单个字段的消息,但这样效率低,有人知道更好的方法吗?
@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;
}
答案 0 :(得分:0)
在点击第一个Validator#validate
时从Error
方法返回。
对于此
您需要有一个自定义Validator
实施org.springframework.validation.Validator
,您可以控制按所需顺序验证字段,而使用@Valid
注释将验证您的所有字段表单Bean并返回所有字段的BindingResult
。
答案 1 :(得分:0)
我能够通过过滤掉具有空/空字段的错误来完成工作,这确实有效,但由于我们验证整个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;
}