Java Bean验证只对Spring中的控制器方法有效?
使用下面的代码进行了尝试,似乎在春季,bean验证只适用于控制器方法(使用@RequestMapping注释的方法),普通方法不会触发bean验证Java Bean验证只对Spring中的控制器方法有效?,java,spring,validation,spring-boot,javabeans,Java,Spring,Validation,Spring Boot,Javabeans,使用下面的代码进行了尝试,似乎在春季,bean验证只适用于控制器方法(使用@RequestMapping注释的方法),普通方法不会触发bean验证 @RequestMapping(value = "/test-validate", method = RequestMethod.POST) public String test(@Validated Obj obj){ return "validation-works"; } @RequestMapping(value = "/test-
@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验证?答案是:它在当前代码中不起作用,因为在调用
localValidate(obj)
时,您完全跳过了Spring创建的代理,而该代理负责验证部分
选项:
localValidate
方法org.springframework.validation.Validator
注入控制器并手动调用它问题是@MDeinum在原始问题中添加了一个问题:如何在普通方法中启用bean验证?如果没有使用AspectJ的AOP技巧,您将无法启用它。您可以注册
MethodValidationPostProcessor
来启用此功能,但它只适用于外部调用,而不适用于内部调用(由于使用了AOP代理)。