[코틀린, kotlin / 스프링] Validation에 대해 알아보자(기본 설정, 구현방법)


1. 스프링(Spring)에서 Validation을 사용하기 위한 기본 세팅

스프링(Spring) 에서 validation을 사용하기 위해서는 dependency을 설정해야한다.
나는 Gradle을 사용하였기 때문에 Gradle에 대한 dependency 추가 방법을 소개하겠다.
build.gradle.kts에 implementation("org.springframework.boot:spring-boot-starter-validation")을 추가하면 된다.


2. 쿼리 파라미터 사용에서 Validation 사용 예시

Get요청의 쿼리 파라미터 사용시 Validation을 사용해보았다.
@RestController
@Validated
@RequestMapping("/api")
class getAPIController {

    @GetMapping("/items/query-param")
    fun queryParam(@NotNull(message = "item 값이 누락되었습니다.")
                   @RequestParam item: String,
                   @Min(value = 10, message = "id는 10보다 커야합니다.")
                   @RequestParam id: Int): String {

        return item+" "+id
    }
- @Validated 어노테이션은 입력된 데이터의 유효성 검사를 활성화하는 것이다.
- @NotNull 어노테이션은 숫자 값이 지정된 최소값 이상이어야 함을 나타내는 것이다.
- @Min 어노테이션은 숫자 값이 지정된 최소값 이상이어야 함을 나타낸다.

여기서 message 속성은 유효성 확인시 출력하는 값이라고 보면 되겠다. 

응답 예)
유효성 pass (id 값 10 이상)

유효성 fail (id 값 10 미만)

message 속성 : id 값은 10보다 커야합니다. 출력 확인

3. json 데이터 전송에서 Validation 사용 예시

Post요청의 json 데이터 전송시 Validation을 사용해보았다.
data class
@RestController
@RequestMapping("/api")
class postAPIController {
    @PostMapping("/post-mapping/object")
    fun postObject(@Valid  @RequestBody itemData: ItemData, bindingResult: BindingResult): Any {
    	//ItemData 객체에 유효성 검사 오류가 있는 경우 실행
        if(bindingResult.hasErrors()){
            val msg = StringBuilder()
            bindingResult.allErrors.forEach{
                val field = it as FieldError
                val message = it.defaultMessage
                msg.append(field.field+" : "+message+"\n")
            }
            return ResponseEntity.badRequest().body(msg.toString())
        }

        return itemData //유효성 검사 오류가 없으면, ItemData 객체를 그대로 반환
    }

}
- @Valid 어노테이션은 Spring의 유효성 검증 기능을 활성화하여, ItemData 객체가 제공된 유효성 검증 규칙을 준수하는지 검사하는 것이다.
- bindingResult: BindingResult는 유효성 검사의 결과를 포함하고 발견된 오류들에 대한 정보를 제공한다.

응답 예)
유효성 fail (item 길이 6초과 & id 0미만) 

msg에 field 이름과 해당 오류 메시지를 문자열로 결합하여 출력하였는데 실제로 유효성 error시 출력되는 결과에 다음과 같이 결과가 출력된 것을 볼 수 있다.