Studying/Java
[@Annotation] @RequestParam
YOO'sssss
2023. 8. 10. 13:16
스프링에서는 Http 요청 파라미터 값을 편리하게 사용하게 해주는 @RequestParam을 지원한다.
HttpServletRequest의 request.getParameter의 기능과 동일하다고 보면 된다.
@RequestParam 사용법
@ResponseBody
@RequestMapping("/request-param-v1")
public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) {
log.info("username={}, age={}"
, memberName, memberAge);
return "ok";
}
Http 요청 파라미터의 이름으로 바인딩하여 그 값을 변수에 저장한다.
@ResponseBody
@RequestMapping("/request-param-v1")
public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) {
log.info("username={ }, age={ }"
, memberName, memberAge);
return "ok";
}
HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam의 value를 생략 가능하다.
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV4(String username, int age) {
log.info("username={ }, age={ }", username, age);
return "ok";
}
파라미터 필수 여부
만약 파라미터에 원하는 값이 없는 경우에는 어떻게 해야 할까?
@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에 required 옵션을 주어 true일 경우는 필수, false일 경우는 필수가 아닌 것으로 설정 가능하다.
required = false일 때 요청 파라미터에 값이 없으면 null이 저장된다.
만약 Integer 대신 int를 사용하게 된다면 오류가 발생하게 되어 주의해야 한다.
default 값 적용
요청 파라미터 값이 없는 경우 defaultValue를 설정할 수 있다.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault( @RequestParam(required = true, defaultValue = "guest") String username, @RequestParam(required = false, defaultValue = "-1") int age)
{ log.info(
"username={ }, age={ }", username, age);
return "ok";
}
이 경우에는 null 대신 -1이 저장되게 되어 int를 사용할 수 있다.
파라미터를 Map으로 조회하기
@ResponseBody
@RequestMapping("/request-param-map")
public String requestParamMap(@RequestParam Map<String, Object> paramMap)
{
log.info("username={ }, age={ }", paramMap.get("username"), paramMap.get("age"));
return "ok";
}
Map에 key, value 형태로 파라미터와 파라미터의 값이 저장되게 된다.
만약 동일한 이름의 파라미터의 값이 2개 이상일 경우 MultiValueMap을 사용하면 된다.