본문으로 바로가기

Kotlin으로 개발하는 Spring Boot Web MVC #3

목차

    실습 환경

    • IntelliJ
    • Kotlin
    • Gradle
    • JDK 11
    • Spring Boot 2.6.2

    실습 코드

    https://github.com/0n1dev/kotlin-spring-practice

     

    GitHub - 0n1dev/kotlin-spring-practice: 인프런 강의

    인프런 강의. Contribute to 0n1dev/kotlin-spring-practice development by creating an account on GitHub.

    github.com

    Spring Boot Validation

    Custom Validation Annotation 만들어서 사용하기

    @Constraint(validatedBy = [StringFormatDateTimeValidator::class])
    @Target(
        AnnotationTarget.FIELD,
        AnnotationTarget.PROPERTY_GETTER,
        AnnotationTarget.PROPERTY_SETTER
    )
    @Retention(AnnotationRetention.RUNTIME)
    @MustBeDocumented
    annotation class StringFormatDateTime(
        val pattern: String = "yyyy-MM-dd HH:mm:ss",
        val message: String = "시간 형식이 유효하지 않습니다.",
        val groups: Array<KClass<*>> = [],
        val payload: Array<KClass<out Payload>> = []
    )
    class StringFormatDateTimeValidator: ConstraintValidator<StringFormatDateTime, String> {
    
        private var pattern: String? = null
    
        override fun initialize(constraintAnnotation: StringFormatDateTime?) {
            this.pattern = constraintAnnotation?.pattern
        }
    
        // 정상이면 true, 비정상이면 false
        override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {
            return try {
                LocalDateTime.parse(value, DateTimeFormatter.ofPattern(pattern))
                true
            } catch (e: Exception) {
                false
            }
        }
    }