Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

JSR-380 Bean Validation : custom annotaion 본문

인프런/[인프런] Kotlin으로 개발하는 Spring Boot Web MVC

JSR-380 Bean Validation : custom annotaion

Seung__ 2022. 4. 25. 00:02

앞선 글과 같이 생성일자의 경우 여기저기서 많이 사용한다.

 

매 번 만들어서 적용하기는 너무 불편하다.

 

custom annotaion을 만들어서 적용을 해보자.

 

1. annotaion


import com.example.kotlinspring.validator.StringFormatDateTimeValidator
import javax.validation.Constraint
import javax.validation.Payload
import kotlin.reflect.KClass

@Constraint(validatedBy = [StringFormatDateTimeValidator::class]) //어떤 validator?
@Target( //적용할 대상
    AnnotationTarget.FIELD,
    AnnotationTarget.PROPERTY_GETTER,
    AnnotationTarget.PROPERTY_SETTER
)
@Retention(AnnotationRetention.RUNTIME) //runtime에 적용
@MustBeDocumented //코틀린에서 annotaion생성시 필수
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>> = []
)

 

2. Validator


import com.example.kotlinspring.annotaion.StringFormatDateTime
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext

class StringFormatDateTimeValidator: ConstraintValidator<StringFormatDateTime, String> {

    private var pattern : String? = null

    override fun initialize(constraintAnnotation: StringFormatDateTime?) {
        this.pattern = constraintAnnotation?.pattern
    }

    //정상이면 true
    override fun isValid(value: String?, context: ConstraintValidatorContext?): Boolean {

        return try {
            LocalDateTime.parse(value, DateTimeFormatter.ofPattern(pattern))
            true
        }catch (e:Exception){
            false
        }
    }
}

 

 

3. 적용


data class UserRequest(


    @field:NotEmpty
    @field:Size(min=2, max=8)
    var name: String? = null,

    @field:PositiveOrZero
    var age: Int? = null,

    @field:Email
    var email: String? = null,

    @field:NotBlank
    var address: String? = null,

    @field:Pattern(regexp = "^\\d{2,3}-\\d{3,4}-\\d{4}\$") //정규식
    var phoneNumber: String? = null, //phone_number: snake case

    @field:StringFormatDateTime(pattern = "yyyy-MM-dd HH:mm:ss", message = "패턴일 올바르지 않습니다.")
    var createdAt: String? = null //yyyy-MM-dd HH:mm:ss
)

 

4. 결과


 

 

5. GitHub : Bean Validation: custom annotation


 

GitHub - bsh6463/KotlinSpring: GET

GET. Contribute to bsh6463/KotlinSpring development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] Kotlin으로 개발하는 Spring Boot Web MVC' 카테고리의 다른 글

예외처리: Exception Handler  (0) 2022.04.25
예외처리: Controleller Advice  (0) 2022.04.25
JSR-380 Bean Validation  (0) 2022.04.24
ResponseEntity, @ResponseBody  (0) 2022.04.24
DELETE  (0) 2022.04.24
Comments