валидатор гибернации не найден в пути к классу

#spring-boot #hibernate-validator #spring-validator

Вопрос:

Я пишу собственные аннотации

 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")
 

Оцените, решите это в отчете
https://scans.gradle.com/s/ddjce3iwnldt4/dependencies?зависимости=валида и расширение и фокусируемая зависимость=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 и ниже реализует API проверки компонентов Java EE.

Hibernate Validator 7 реализует (более новый) API проверки компонентов Jakarta, который почти такой же, но с javax.validation пакетом, переименованным в jakarta.validation .

Насколько я знаю, Spring Framework все еще использует проверку компонентов Java EE.

Так что то, что вы делаете, не сработает. Сообщение правильное, нет реализации проверки компонентов Java EE; только реализация проверки компонентов Jakarta, и Spring Framework это не поддерживает.

На данный момент, если вы хотите использовать Spring Framework, вы застряли с валидатором Hibernate 6.