弹簧验证如何获得验证结果?

时间:2012-06-25 21:41:29

标签: spring validation

代码如下:

....
@RequestMapping( "/test")
    @ResponseBody
    public ResponseTO test(
            @Valid  @RequestBody RequestTO to, HttpServletResponse resp)
    {
           //how do I get validation results here?
        return new ResponseTO("111");
    }

  @InitBinder
  protected void initBinder(WebDataBinder binder) {
      binder.setValidator(new TestValidator());
  }




class TestValidator implements Validator {

    /**
    * This Validator validates just Person instances
    */
    public boolean supports(Class clazz) {
        return RequestTO.class.equals(clazz);
    }

    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        RequestTO tx = (RequestTO) obj;
        if (tx.getName().equals("buy")) {
            e.rejectValue("feature", "NOT BUY");
        } 
    }
}   

我无法弄清楚的部分是如何在控制器中获得验证结果?谢谢!

1 个答案:

答案 0 :(得分:1)

正如Sunil所提到的,你正在混合两种方法

如果要使用JSR303 Bean验证,可以定义bean字段的约束,如

public class Customer {

    @NotEmpty //make sure name is not empty
    String name;

    @Range(min = 1, max = 150) //age need between 1 and 150
    int age;
 } 

@valid用于验证bean字段,您可以使用BindingResult来获取错误

@RequestMapping(value = "/signup", method = RequestMethod.POST)
    public String addCustomer(@Valid Customer customer, BindingResult result) {

        if (result.hasErrors()) {
            return "SignUpForm";
        } else {
            return "Done";
        }
    }  

检查此link以获取更多详细信息。

或者您可以实施Validator并定义validate方法(如您在问题中所述)。
然后你必须调用validate方法,传递BindingResult对象并添加错误(如果存在)。然后,您可以检查BindingResult对象是否有任何错误 对于前者

new TestValidator ().validate(requestTO , bindingResult); // invoking validate method     

并检查错误

if (bindingResult.hasErrors()) {
  // Errors are present do something here
}
else
{
  // All is well!!
}

或者您可以将validator定义为特定的bean spring配置文件。有关详细信息,请查看此link