如何验证Spring bean中的单个字段?

时间:2013-07-22 13:13:03

标签: validation spring-mvc

似乎验证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;

}

2 个答案:

答案 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;
}