代码如下:
....
@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");
}
}
}
我无法弄清楚的部分是如何在控制器中获得验证结果?谢谢!
答案 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。