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

标签 java spring bean-validation hibernate-validator

我正在使用 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 注释了我的服务接口(interface),并使用 @NotNull、@Size、@Valid 等注释了方法参数,并且工作正常。

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

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

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

如何使用 Spring 和 hibernate-validator 以及组支持来执行服务层验证?

最佳答案

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

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

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

关于java - 在服务层中使用 Spring 进行 Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532861/

相关文章:

java - 如何在 Java 中检索数组值?

hibernate - JSR-303 依赖注入(inject)和 Hibernate

java - Hibernate Bean 验证在类路径中不可用

spring-boot - Springboot 错误消息插值不适用于自定义验证器

java - 如何在 Java 8 (Scala) 中将日期时间字符串转换为长(UNIX 纪元时间)

java - 求两个矩阵的 boolean 积

java - @RequestParam 为空(Spring MVC)

spring - chalice 升级错误-创建名称为 'transactionManagerPostProcessor'的bean

java - 通过扫描仪在java中使用运算符

java - 如何反转 while 循环生成的一系列数字的顺序?