Hej,
我想使用@Validated(group=Foo.class)
在执行方法之前验证参数的注释,如下所示:
public void doFoo(Foo @Validated(groups=Foo.class) foo){}
当我将此方法放入 Spring 应用程序的控制器中时,@Validated
当 Foo 对象无效时执行并抛出错误。但是,如果我将相同的内容放入应用程序服务层的方法中,则即使 Foo 对象无效,也不会执行验证,并且该方法只会运行。
你不能使用@Validated
服务层的注解?或者我是否必须配置一些额外的东西才能使其工作?
Update:
我已将以下两个 bean 添加到我的 service.xml 中:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
并替换了@Validate
with @Null
像这样:
public void doFoo(Foo @Null(groups=Foo.class) foo){}
我知道这是一个非常愚蠢的注释,但我想检查一下,如果我现在调用该方法并传递 null ,它会抛出一个违规异常。那么为什么它执行@Null
注释而不是@Validate
注释?我知道其中一个来自javax.validation
另一个来自 Spring,但我认为这与它没有任何关系?
在 Spring MVC 堆栈的眼中,不存在服务层这样的东西。它起作用的原因@Controller
类处理方法是 Spring 使用一种特殊的HandlerMethodArgumentResolver
called ModelAttributeMethodProcessor
它在解析要在处理程序方法中使用的参数之前执行验证。
我们所说的服务层只是一个普通的 bean,没有从 MVC 添加任何额外的行为(DispatcherServlet
) 堆。因此,您不能指望来自 Spring 的任何验证。您需要自己推出,可能使用 AOP。
With MethodValidationPostProcessor
,看一下javadoc
适用的方法在其上有 JSR-303 约束注释
参数和/或它们的返回值(在后一种情况下指定
在方法级别,通常作为内联注释)。
可以通过Spring的Validated指定验证组
在包含目标类的类型级别进行注释,应用
该类的所有公共服务方法。默认情况下,JSR-303 将
仅针对其默认组进行验证。
The @Validated
注释仅用于指定验证组,它本身并不强制进行任何验证。您需要使用其中之一javax.validation
注释如@Null
or @Valid
。请记住,您可以在方法参数上使用任意数量的注释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)