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 }
    }
}

@AssertTrue を用いる方法

Spring Bean Validationで相関チェックを行う | SEのプログラミングと英語の勉強ブログ