【发布时间】:2016-06-15 06:10:37
【问题描述】:
尝试使用下面的代码,似乎在 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 验证?
【问题讨论】:
-
问题是?!
-
@MDeinum 在原始问题中添加问题:如何在普通方法中启用 bean 验证?
-
如果没有使用 AspectJ 的 AOP 技巧,您将无法启用它。您可以注册
MethodValidationPostProcessor来启用此功能,但它仅适用于外部调用,而不适用于内部调用(由于使用 AOP 代理)。
标签: java spring validation spring-boot javabeans