Spring Custom Validator
カスタムバリデータを作成する方法
Spring Boot conditional validation example.
package com.code.common.util
import javax.validation.Constraint
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext
@Constraint(validatedBy = [ConditionalRequiredValidator::class])
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD)
annotation class ConditionalRequired(
val condition: String,
val fields: Array<String>
)
class ConditionalRequiredValidator : ConstraintValidator<ConditionalRequired, Any> {
private var condition: String? = null
private var fields: Array<String> = arrayOf()
override fun initialize(annotation: ConditionalRequired?) {
condition = annotation?.condition
fields = annotation?.fields ?: arrayOf()
}
override fun isValid(value: Any?, context: ConstraintValidatorContext?): Boolean {
if (value == null) {
return true
}
return value.javaClass.fields
.filter { it.name in fields }
.all { it.get(null) != null }
}
}