Goal
Kotlin 에서 @RequestParam 을 사용할 때 기본값을 넣는 방법에 대해 알아봅니다.
@RequestParam
보통 GET Method 형태로 RESTful 한 API 를 만들 때 @RequestParam 어노테이션을 사용해서 parameter 를 주입받게 됩니다.
아래처럼 사용하는 것이 일반적이죠.
@GetMapping('/api/v1/order/{orderItemId}')
fun getOrdersByOrderItemIds(
@PathVariable orderItemId: Long,
@RequestParam page: Int,
@RequestParam size: Int,
)
page 와 size 에 대해서는 기본값을 설정하고 싶어서 처음에는 다음과 같이 시도했는데요.
@GetMapping('/api/v1/order/{orderItemId}')
fun getOrdersByOrderItemIds(
@PathVariable orderItemId: Long,
@RequestParam page: Int? = 1,
@RequestParam size: Int? = 10,
)
실행해보니 기본값으로 설정한 1, 10 이 넘어오는게 아니라 null 이 넘어오더라구요.
검색을 해보니 원인은 해당 API 가 호출이 되면 ArgumentResolver를 거치게 되는데 이 때 page 와 size 에 null 이 채워진채로 받기 때문에 기본값이 설정되지 않는다고 해요.(RequestParamMethodArgumentResolver)
따라서 이 때는 @RequestParam 어노테이션 자체의 설정을 활용하면 의도한대로 작동하게 됩니다.
@GetMapping('/api/v1/order/{orderItemId}')
fun getOrdersByOrderItemIds(
@PathVariable orderItemId: Long,
@RequestParam(defaultValue = "1") page: Int,
@RequestParam(defaultValue = "10") size: Int,
)