簡體   English   中英

不使用 Spring Boot LocalValidatorFactoryBean 的休眠驗證

[英]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() (參見代碼)。

我想我打算用SessionFactoryOptionsConfigurationService做一些事情,但我不知道如何在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM