Я пытаюсь построить более сложные правила проверки, используя несколько полей.
import javax.validation.*
import kotlin.reflect.KClass
@Constraint(validatedBy = [MyCustomCheckValidator::class])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class MyCustomCheck(
val message: String = "invalid",
val groups: Array<KClass<*>> = [],
val payload: Array<KClass<out Payload>> = []
) {
}
@MyCustomCheck
data class Foo (
var bool: Boolean,
var value1: Int?,
var value2: Int?
)
class MyCustomCheckValidator : ConstraintValidator<MyCustomCheck, Foo> {
override fun isValid(foo: Foo, context: ConstraintValidatorContext): Boolean {
return if (foo.bool)
foo.value1 != null && foo.value2 != null
else
true
}
}
fun main() {
val foo = Foo(true, null, null)
val validator = Validation.buildDefaultValidatorFactory().validator
val result = validator.validate(foo)
println(result.size)
}
Предположим, что Foo (true, null, null) проверяется. Я должен указать, что оба поля value1 и value2 должны быть зафиксированы. Как я могу это сделать? Может быть, есть способ создать более одной ConstraintViolation для одной проверки?