Валидация поля на основе перечисления kotlin, spring

Всем здравтвуйте. Я использую spring boot, kotlin и jakarta, хочу создать кастомный валидатор для проверки полей на соответствие значений перечисления. У меня есть интерфейс с методом для валидации checkIsValid. Не могу понять, как передать свой класс с перечислением в качестве аргумента + насколько это адекватное решение, т.к. в koltin новичек


typealias CheckIsValid<T> = (value: T) -> Boolean

interface EnumWithValueValidator<T> {
    val checkIsValid: CheckIsValid<T>
}


@Documented
@Constraint(validatedBy = [EnumValidatorImpl::class])
@Retention(RetentionPolicy.RUNTIME)
@Target(
    AnnotationTarget.FIELD
)
@ReportAsSingleViolation
annotation class EnumValidator(
    val enumClazz: KClass<EnumWithValueValidator<Any>>,
    val message: String = "Value is not valid",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Payload>> = []
)


class EnumValidatorImpl : ConstraintValidator<EnumValidator, String> {
    private var checkIsValid: CheckIsValid<Any>? = null

    override fun isValid(value: String, context: ConstraintValidatorContext): Boolean {
        if (checkIsValid == null) {
            return false
        }

        return checkIsValid!!.invoke(value)
    }

    override fun initialize(constraintAnnotation: EnumValidator) {
        checkIsValid = constraintAnnotation.enumClazz.objectInstance?.checkIsValid
    }
}


data class CallDto(
    @field:EnumValidator(enumClazz = CountryCode) // ошибка(фото ниже)
    @field:NotNull
    val countryCode: Int,

    @field:Size(min = PHONE_NUMBER_SIZE, max = PHONE_NUMBER_SIZE)
    val phoneNumber: String,

    @field:Size(min = CODE_SIZE, max = CODE_SIZE)
    val code: String
)

введите сюда описание изображения


Ответы (0 шт):