![](/img/trans.png)
[英]Spring Data REST(using Spring Boot) - Hibernate Validation Localization
[英]Hibernate Validation not using Spring Boot LocalValidatorFactoryBean
我遇到了一個問題,當spring.jpa.properties.javax.persistence.validation.mode
設置為auto
(默認)時,它會嘗試驗證我的實體,這很棒。 但是,我有一些自定義的 ConstraintValidator 依賴於通過構造函數自動連接到它們中的依賴項。 結果我得到了錯誤:
Caused by: javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: project.CustomValidator.
這是因為:
Caused by: java.lang.NoSuchMethodException: project.CustomValidator.<init>()
由於我的依賴項是通過構造函數注入的,因此沒有 0 arity 構造函數。
當我像這樣為 Spring Boot 創建配置時:
@Configuration
open class ValidationContext {
@Bean
open fun validator(): Validator {
return LocalValidatorFactoryBean()
}
}
Spring Boot 驗證器工廠工作正常,實例化我的自定義 ConstraintValidator 沒有問題。 但是,Hibernate 不使用這個工廠。 相反,它調用Validation.buildDefaultValidatorFactory()
(參見代碼)。
我想我打算用SessionFactoryOptions
或ConfigurationService
做一些事情,但我不知道如何在 Spring Boot 中配置它。
如何讓 Hibernate 使用 LocalValidatorFactoryBean 實例?
訣竅是使用HibernatePropertiesCustomizer
來指定要使用的驗證工廠。 像這樣:
@Bean
open fun hibernatePropertiesCustomizer(validator: Validator): HibernatePropertiesCustomizer {
return HibernatePropertiesCustomizer { properties: MutableMap<String, Any> -> properties["javax.persistence.validation.factory"] = validator }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.