繁体   English   中英

在服务层中使用Spring使用组进行Bean验证

[英]Bean Validation with groups using Spring in Service Layer

我正在使用Spring-3.1.0.GA开发服务(不是Web应用程序)。 我想将hibernate-validator与Spring一起使用以验证我的服务输入。

我已经启用了bean验证支持:

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

我已经用@Validated注释了我的服务接口,并使用@ NotNull,@ Size,@ Valid等注释了方法参数,并且工作正常。

但是我必须根据验证组来验证我的参数,例如Customer。 如果我用@Validated或@Validated(Group1.class)注释方法参数,Spring不会执行任何验证。

如果我使用@Valid进行注释,则将进行验证,但使用默认验证组(如预期的那样)。

我无法在接口级别注释@Validate(Group1.class),因为各种方法都在不同的组上运行。

如何使用Spring和带有组支持的hibernate-validator进行服务层验证?

我已经遍历了Spring源代码以及为什么未选择方法参数上的验证组...根据代码,它仅从@Validated上的接口级别(而不是方法级)选择验证组配置。

但是我还没有检查过它在SpringMVC上下文中的工作方式,还没有检查。

同样在此过程中,我知道如果您在子应用程序上下文中配置MethodValidationPostProcessor,则Spring不会对其进行处理。 我的意思是,如果您使用的是SpringMVC,则仅在[servlet-name] -servlet.xml中对其进行配置时,才会注册MethodValidationPostProcessor。 如果您在ContextLoaderListener所选择的任何子上下文环境中进行配置,Spring将不会注册MethodValidationPostProcessor。 另外,我不确定它是否仅适用于MethodValidationPostProcessor或任何BeanPostProcessor。

在Spring 3.1.0+中,您可以直接在@Valid批注中使用组。 例如:

@Valid(groups={Default.class, Group1.class})

我得到以下代码,我需要在方法标题处附加@Validated并在方法参数中附加@Valid。

@Validated(Default.class)
public UserDto updateUser(@Valid UserDto userDto) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM