2012-05-10 76 views
0

我正在開發使用Spring-3.1.0.GA的服務(而不是Web應用程序)。我想和Spring一起使用hibernate-validator來驗證我的服務輸入。使用Spring在服務層的組進行Bean驗證

我已啓用與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對組進行服務層驗證?

+0

您是否需要啓用註釋?例如。將''添加到'applicationContext.xml'的行(儘管這將適用於Spring MVC應用程序,這似乎並不適用)。 – vegemite4me

回答

0

在Spring 3.1.0+中,您可以直接在@Valid註釋中使用組。例如:

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

@Valid來自bean驗證API,它不支持組。 –

0

我已經經歷了春源代碼消失了,爲什麼法PARAMS驗證羣體不被挑...按代碼,僅能從@Validated採摘接口一級認證組的配置,不在方法級別上。

但我還沒有經過SpringMVC上下文的工作,我還沒有檢查。

同樣在這個過程中,我開始瞭解如果在子應用程序上下文中配置MethodValidationPostProcessor,它不會被Spring拾取。我的意思是,如果您使用的是SpringMVC,則只有在[servlet-name] -servlet.xml中配置MethodValidationPostProcessor時,纔會註冊MethodValidationPostProcessor。如果您在任何子上下文中配置由ContextLoaderListener挑選的配置文件,Spring將不會註冊MethodValidationPostProcessor。另外我不確定它僅適用於MethodValidationPostProcessor或任何BeanPostProcessor。