반응형
Kotlin 으로 RESTful API 를 생성하는데, @RequestParam 으로 입력받는 파라미터에 기본값이 제대로 주입이 안되는 이슈를 겪었습니다. 이에 대한 솔루션을 정리하고자 합니다.
구현하고자 했던 기능
페이징 처리가 가능한 조회 API 를 생성하는 과정에서 일반적으로 page
와 size
에 대해 입력을 받게 됩니다. 보통은 첫 페이지에 10개, 20개씩 등 정해진 값으로 조회를 많이 하기 때문에 굳이 입력을 받지 않더라도 기본값을 설정해두는고 개발을 진행하게 됩니다.
예상
Kotlin 에 입문한지 얼마 되지 않아 아무것도 몰랐던 저는.. 위 기능을 구현하기 위해 아래와 같이 사용하면 기본값을 입력받을 수 있을 줄 알았습니다.
@GetMapping('/api/v1/order/{orderItemId}')
fun getOrdersByOrderItemIds(
@PathVariable orderItemId: Long,
@RequestParam page: Int? = 1,
@RequestParam size: Int? = 10
) {
...
}
Kotlin 에서는 보통 nullable
필드에 대해서 ?
를 활용하여 표현한다고 알고 있었기 때문에 값이 입력되지 않았을 때 자체적으로 page
는 1, size
는 10 으로 주입받을 줄 알았습니다.
막상 실행해보니 제가 기본값으로 설정했던 1, 10 이 넘어오는게 아니라 null
이 넘어왔습니다.
원인
검색을 해보니 원인은 스프링에서 API 가 호출이 되면 ArgumentResolver
를 거치게 되는데 이 때 page
와 size
에 null
으로 이미 채워져서 전달이 되기 때문에 기본값이 설정되지 않는다고 합니다. (RequestParamMethodArgumentResolver
)
해결 방법
따라서 이 때는 @RequestParam
어노테이션 자체의 설정 (defaultValue
속성)을 활용하면 의도한대로 작동하게 됩니다.
@GetMapping('/api/v1/order/{orderItemId}')
fun getOrdersByOrderItemIds(
@PathVariable orderItemId: Long,
@RequestParam(defaultValue = "1") page: Int,
@RequestParam(defaultValue = "10") size: Int, // RequestParam 어노테이션의 defaultValue 활용
)
반응형
'코틀린' 카테고리의 다른 글
[코틀린] 삼항연산자 사용하기 (0) | 2023.03.07 |
---|
댓글