Skip to content

独自バリデーション向けアノテーションを作成

バリデーションに使うアノテーションを自作します。

事前準備

下記依存関係を追加します:

xml
		<!-- Source: https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
		<dependency>
			<groupId>jakarta.validation</groupId>
			<artifactId>jakarta.validation-api</artifactId>
			<version>3.1.1</version>
			<scope>compile</scope>
		</dependency>

        <!-- Source: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>4.0.6</version>
            <scope>compile</scope>
        </dependency>

実装

指定したパラメータが特定の値であるかをチェックするアノテーションを作成します。

  • アノテーション
kotlin
package nob.example.easyapp.validator

import jakarta.validation.Constraint
import jakarta.validation.Payload
import kotlin.reflect.KClass

/**
 * サンプルのバリデーションです。
 */
@MustBeDocumented
@Constraint(validatedBy = [SampleValidator::class])
@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
annotation class Sample(
    val message: String = "バリデーションエラーが発生しました。",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Payload>> = []
)
  • バリデーションの実装
kotlin
package nob.example.easyapp.validator

import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext

class SampleValidator : ConstraintValidator<Sample, String> {

    override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {

        // ユーザ名"nob"は許可しない
        return !value.equals("nob")
    }
}