Валидация поля на основе перечисления 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
)
