스프링은 @RequestParam을 통해 HTTP 요청 파라미터를 받을 수 있다.
@RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다.
@RequestParam은 이를 처리하는 ArgumentResolver인 RequestParamMethodArgumentResolver에서 ConversionService를 사용해서 타입을 변환한다.
@RequestParam의 name(value) 속성이 파라미터 이름으로 사용된다.
@RequestParam("username") String memberName // 아래 코드와 동일
request.getParameter("username")
HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam(name="xx") 생략 가능
@ResponseBody
@RequestMapping("/request-param")
public String requestParam(@RequestParam String username, @RequestParam int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
String, int, Integer 등의 단순 타입이면 @RequestParam도 생략 가능
@ResponseBody
@RequestMapping("/request-param")
public String requestParam(String username, int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
@RequestParam의 required 속성을 사용하여 파라미터의 필수 여부를 설정할 수 있다. 기본값은 true이며, 해당 파라미터가 없으면 예외가 발생한다.
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(@RequestParam(required = true) String username, @RequestParam(required = false) Integer age) {
log.info("username={}, age={}", username, age);
return "ok";
}
@RequestParam의 defaultValue 속성을 사용하여 파라미터의 기본값을 설정할 수 있다. 파라미터가 없거나 빈 문자열인 경우 기본값이 사용된다.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(@RequestParam(defaultValue = "guest") String username, @RequestParam(defaultValue = "0") int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
여러 개의 파라미터를 맵(Map)으로 받을 수도 있다.
@ResponseBody
@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String, String> paramMap) {
log.info("username={}, age={}", paramMap.get("username"), paramMap.get("age"));
return "ok";
}