HackToTech

Hack To Technology

BeanValidationでControlCharacterが含まれる場合をバリデーションする

リクエストとかでControlCharacterが混じっていると邪魔になるので弾きたかったという話
調べてもすぐにぱぱぱっと出てこなかったりして面倒なのでメモがてら書く

どちらも空文字は許可するようにしてある
テストはソースに書いてあるので興味があれば

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

@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
@Constraint(validatedBy = [])
@Pattern(regexp = "^$|[^\\p{Cntrl}]+")
annotation class RejectControlCharacters(
    val message: String = "{com.example.validatecontrolcharacterssample.constraints.RejectControlCharacters.message}",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Payload>> = []
)

改行だけは許可したいみたいな場合はこっち

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

@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
@Constraint(validatedBy = [])
@Pattern(regexp = "^$|[^[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F]]+")
annotation class RejectControlCharactersOtherThanLineBreak(
    val message: String = "{com.example.validatecontrolcharacterssample.constraints.RejectControlCharactersOtherThanLineBreak.message}",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<out Payload>> = []
)

書いたソースはここ github.com