[Kotlin] @NotNull Validation 사용하기

2025. 1. 16. 16:34·스터디/Kotlin
728x90

목차

     

     

     

    1. Gradle 설정

    • spring-boot-starter-validation 의존성을 명시해야 valid 사용이 가능합니다.
    implementation 'org.springframework.boot:spring-boot-starter-validation'

     

    2. Valid 사용방법

    data class ValidRequestDto(
        @field:NotNull(message = "value는 필수 입력값입니다.")
        val value: String? = null,
      
        @field:NotNull(message = "createdAt은 필수 입력값입니다.")
        val createdAt: LocalDate? = null,
      
        @field:NotNull(message = "number는 필수 입력값입니다.")
        val number: Long? = null
    )

    Java Validation 적용방법과는 다른 부분이있습니다.

    1) @field:[Validation Annotaion]
    코틀린으로 Valid 관련 제약사항을 명시할 때 Validation 관련 annotation 앞에 @field 를 prefix 로 붙여줘야합니다.

     

    2) 클래스 멤버 필드는 nullbalefh wlwjd

    코틀린으로 Validation을 적용하려면 (특히 NotNull) nullable type 으로 선언해야됩니다.

    // validation에 의한 유효성 검사가 아닌 type matching에 대한 검증이 우선시된다.
    data class ValidRequestDto(
        @field:NotNull(message = "value는 필수 입력값입니다.")
        val value: String
    )​

    위 코드에서는 validation 유효성 검사가 아닌 타입 검증이 우선시 되어서 예외가 발생하면 valid 에 지정해놓은 예외 메시지를 무시합니다

     

     

     

    3. Validation 적용 및 형태

    Controller 레이어에 validaiton을 적용한다면 아래와 같이 적용할 수 있습니다.

    @GetMapping("/get")
    fun getParam(
        @Valid @ModelAttribute validRequestDto: ValidRequestDto
    ) {...}

    이때 Controller 에서 3가지 형태에 따라 Validation 내용 차이가 발생합니다.

    • @Modelattribute
    • @Requestbody
    • @RequestParam, @PathVariable

    @ModelAttribute

    @GetMapping("/get")
    fun getParam(
      @Valid @ModelAttribute validRequestDto: ValidRequestDto
    ) {...}
    • 유효성 검증 에러가나면 400 error code 반환
    • BindException 발생
    • @ModelAttribute의 validation error는 BindingResult 를 받아서 예외를 핸들링한다.

     

    @RequestBody

    @PostMapping("/post")
    fun postRequestBody(
        @Valid @RequestBody validRequestDto: ValidRequestDto
    ) {...}

     

    • validation 검증 에러가나면 400 error code 반환
    • MethodArgumentNotValidException 예외 발생
    • BindException을 확장한 에러 클래스로 BindException 으로 예외 핸들링해도 됩니다.
    • POST로 요청보낼 시 request body 데이터를 json 형태로 지정해주어야 한다.
    • 지정하지 않을 경우 HttpMessageNotReadableException 발생!

     

     

    @RequestParam, @PathVariable

    @RestController
    @Validated
    class ValidationController {
      @GetMapping("/get")
      fun getParam(
          @NotNull(message = "필수값입니다.") @RequestParam("value") value: String?
      ): String? {
        //...
      }
    }

     

    • @RequestParam 은 클래스 단게에서 @Validated 어노테이션이 필요합니다.
    • validation 에러는 500 error code를 반환 (ControllerAdvice)를 통해 400 에러코드로 변환하여 반환할 수 있다.)
    • ConstraintViolationException 예외를 던진다.
    • BindingResult에 담지 않기 때문에 BindingResult를 사용할 수 없다.

    4. 참고자료

    https://beaniejoy.tistory.com/72

    https://yeongchan1228.tistory.com/133

    728x90
    저작자표시 비영리 변경금지 (새창열림)

    '스터디 > Kotlin' 카테고리의 다른 글

    코틀린의 Error Handling - runCatching  (0) 2025.03.24
    [Kotlin] List와 MutableList 개념 및 차이점  (0) 2025.01.18
    Kotlin 예외처리(2) - check(), checkNotNull()  (0) 2025.01.13
    Kotlin 예외처리 - require(), requireNotNull()  (0) 2025.01.12
    [Kotlin] isNotEmpty(), isNotBlank(), isNullOrEmpty(), isNullOrBlank() 차이  (1) 2024.07.10
    '스터디/Kotlin' 카테고리의 다른 글
    • 코틀린의 Error Handling - runCatching
    • [Kotlin] List와 MutableList 개념 및 차이점
    • Kotlin 예외처리(2) - check(), checkNotNull()
    • Kotlin 예외처리 - require(), requireNotNull()
    zoodi
    zoodi
    IT/개발 관련 지식을 기록하는 블로그입니다.
    • zoodi
      오늘의 기록
      zoodi
    • 전체
      오늘
      어제
      • 분류 전체보기
        • 후기
          • 컨퍼런스
          • 일상리뷰
        • 금융경제
          • 뉴스
          • 금융IT용어
          • 경제 및 부동산
        • 코딩 테스트
        • 스터디
          • JAVA
          • Kotlin
          • Spring
          • React, Nextjs
          • 인공지능 AI
          • Cloud & k8s
          • Kafka
          • Database
          • Network
          • Algorithm
          • Hadoop
          • LINUX
          • R Programming
          • 기타 (소공, 보안)
        • 도서
        • 기타
    • 블로그 메뉴

      • 홈
      • 스터디
      • 금융경제
      • 후기
      • 기타
    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코딩
      db
      CodingTest
      리트코드
      자바
      MySQL
      자료구조
      코딩테스트
      LeetCode
      쿠버네티스
      카카오코테
      스프링
      이분탐색
      코딜리티
      springboot
      Python
      금융용어
      프로그래머스
      Spring
      codility
      Kotlin
      pythoncodingtest
      코테공부
      코테
      C++
      java
      kafka
      스프링부트
      네트워크
      알고리즘
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    zoodi
    [Kotlin] @NotNull Validation 사용하기
    상단으로

    티스토리툴바