0

我正在使用 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 等注释了方法参数,它工作正常。

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

如果我使用 @Valid 进行注释,那么验证正在发生但使用默认验证组(如预期的那样)。

我无法在接口级别注释 @Validate(Group1.class) 因为各种方法对各种组进行操作。

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

4

3 回答 3

1

我已经浏览了 Spring 源代码以及为什么没有选择方法参数上的验证组...根据代码,它仅从接口级别的 @Validated 而非方法级别选择验证组配置。

但是我还没有了解它在 SpringMVC 上下文中是如何工作的,我还没有检查过。

同样在这个过程中,我了解到如果您在子应用程序上下文中配置 MethodValidationPostProcessor,它不会被 Spring 拾取。我的意思是,如果您使用 SpringMVC,只有在 [servlet-name]-servlet.xml 中配置 MethodValidationPostProcessor 时才会注册它。如果您在 ContextLoaderListener 选择的任何子上下文配置文件中进行配置,Spring 将不会注册 MethodValidationPostProcessor。此外,我不确定它是否仅适用于 MethodValidationPostProcessor 或任何 BeanPostProcessors。

于 2012-05-14T04:54:12.267 回答
1

我得到以下代码工作,我需要在方法头附加@Validated,在方法参数中附加@Valid。

@Validated(Default.class)
public UserDto updateUser(@Valid UserDto userDto) {
于 2018-11-23T10:53:06.100 回答
0

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

@Valid(groups={Default.class, Group1.class})
于 2012-05-10T11:28:48.050 回答