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,
)