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. 참고자료
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 |