在类路径中找不到休眠验证器

Posted

技术标签:

【中文标题】在类路径中找不到休眠验证器【英文标题】:hibernate validator not found in classpath 【发布时间】:2021-09-06 13:20:18 【问题描述】:

我写自定义注解

package ru.tinkoff.bpm.verificationcheckservice.support.validation

import org.hibernate.validator.constraints.CompositionType
import org.hibernate.validator.constraints.ConstraintComposition
import org.hibernate.validator.constraints.URL
import javax.validation.Constraint
import javax.validation.Payload
import javax.validation.ReportAsSingleViolation
import javax.validation.constraints.NotBlank
import kotlin.annotation.AnnotationRetention.RUNTIME
import kotlin.annotation.AnnotationTarget.FIELD
import kotlin.reflect.KClass

@ConstraintComposition(CompositionType.AND)
@URL
@NotBlank
@ReportAsSingleViolation
@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = [])
annotation class NotBlankUrl(
    val message: String = "must be not blank and valid URL",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Payload>> = []
)

我为 build.gradle.kts 添加依赖

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.hibernate:hibernate-validator:7.0.1.Final")

Gradle 在报告中解决它 https://scans.gradle.com/s/ddjce3iwnldt4/dependencies?dependencies=valida&expandAll&focusedDependency=WzEsOCwxNDk2LFswLDEsWzE5XV1d

但是当我启动应用程序时,我看到了错误

The Bean Validation API is on the classpath but no implementation could be found

Action:

Add an implementation, such as Hibernate Validator, to the classpath

完整日志https://scans.gradle.com/s/ddjce3iwnldt4/console-log#L101

为什么 spring 不识别验证器?

【问题讨论】:

【参考方案1】:

Hibernate Validator 6 及更低版本实现了 Java EE Bean Validation API。

Hibernate Validator 7 实现了(更新的)Jakarta Bean Validation API,它几乎相同,但将 javax.validation 包重命名为 jakarta.validation

据我所知,Spring Framework 仍在使用 Java EE Bean Validation。

所以你正在做的事情不会奏效。消息正确,没有实现Java EE Bean Validation;只是 Jakarta Bean Validation 的实现,Spring Framework 不支持。

目前,如果您想使用 Spring Framework,则只能使用 Hibernate Validator 6。

【讨论】:

以上是关于在类路径中找不到休眠验证器的主要内容,如果未能解决你的问题,请参考以下文章

TestNG 错误在类路径中找不到类

macos 致命错误: 在类路径或引导类路径中找不到程序包 java.lang

@ConfigurationProperties Spring Boot 配置注释处理器在类路径中找不到

Spring boot graphql 在类路径中找不到 graphql 模式文件

错误:org.testng.TestNGException:在类路径中找不到类:EmpClass

使用启用了安全管理器的 Tomcat 时,在类路径中找不到属性文件