尝试使用下面的代码,在Spring中,bean验证仅适用于控制器方法(使用@RequestMapping注释的那些),普通方法不会触发bean验证。
@RequestMapping(value = "/test-validate", method = RequestMethod.POST)
public String test(@Validated Obj obj){
return "validation-works";
}
@RequestMapping(value = "/test-local-method-validate", method = RequestMethod.POST)
public String test2(@Validated Obj obj){
Obj obj = new Obj();
localValidate(obj);//won't validate, though content is null
}
void localValidate(@Validated Obj obj){
log.debug("entered");
}
//Model
public class Obj{
@NotNull
public String content = null;
}
如果我们调用第一个方法:/ test-validate,则会触发验证,而对于第二个方法:/ test-local-method-validate,我们使用本地普通方法调用:localValidate,验证不会工作
如果是,如何在普通方法中启用bean验证?
答案 0 :(得分:1)
答案是:它不适用于您当前的代码,因为在调用localValidate(obj)
时,您正在完全跳过Spring创建的代理,并且此代理负责验证部分。
选项:
localValidate
方法,org.springframework.validation.Validator
注入您的控制器并手动调用