1

代码如下:

....
@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");
        } 
    }
}   

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

4

1 回答 1

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 字段,您可以使用BindingResultlike

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

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

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

或者您可以实现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 配置文件。检查此链接以获取详细信息。

于 2012-06-26T08:17:00.290 回答