Kotlin

Kotlin List Validation - 리스트 타입 파라미터 검증

ysk(0soo) 2023. 1. 3. 04:14

코틀린 + Spring Boot 환경에서 Request 를 검증할 때,

String 타입의 List를 Null과 빈 값을 허용하지 않기 위한 @NotBlank 어노테이션으로는, List 타입의 필드를 검증할 수 없다.

 

자바에서는 다음처럼 사용할 수 있지만 코틀린에서는 사용할 수 없다.

public class Request {
  private List<@NotBlank String> inputs;
}

@field:NotBlack 와 @get:NotBlank 둘 다 사용할 수 없다.

  • 필드나 getter에 걸고 싶기때문에 field:를 명시해줘야 하지만, 이 방법이 통하지 않는다.

해결하기 위해서 사용자 지정 validation annotation을 만들어야 한다.

@NotBlank List Elements Custom Validation Annotation

먼저 어노테이션을 선언한다

@Target(AnnotationTarget.FIELD)
@Retention(AnnotationRetention.RUNTIME)
@Constraint(validatedBy = [NotBlankElementListValidator::class])
annotation class NotBlankElementList(
    val message: String = "리스트 안에 빈 값이 존재합니다.",
    val groups: Array<KClass<*>> = [],
    val payload: Array<KClass<*>> = [],
)

Validator를 구현한다.

class NotBlankElementListValidator : ConstraintValidator<NotBlankElementList, List<String>> {

    override fun isValid(lists: List<String>?, context: ConstraintValidatorContext?): Boolean {
        if (lists == null) {
            return false
        }
        return lists.none { StringUtils.isEmpty(it) }
    }
}
  • 단순히 List 파라미터 자체가 null값인지, 또는 StringUtils를 이용하여 empty String인지 검사하는 로직이다

Request DTO에 적용한다

class Request(

    @field:NotNull
    val requestId: Long,

    @field:NotBlank
    val name: String,

    @NotBlankElementList
    val texts: List<String>

)