스프링에서 요청 파라미터를 전달하는 방법에는 여러가지가 있다.
public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
log.info("username={}, age={}", username, age);
response.getWriter().write("ok");
}
@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(
@RequestParam("username") String memberName,
@RequestParam("age") int memberAge
)
{
log.info("username={}, age={}", memberName, memberAge);
return "ok";
}
별도로 기입하지 않을 경우 아래와 같이 사용가능, 단 변수명이 파라미터의 이름과 같아야한다.
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(
@RequestParam String username,
@RequestParam int age
)
{
log.info("username={}, age={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(
String username,
int age
)
{
log.info("username={}, age={}", username, age);
return "ok";
}
@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";
}
required 설정으로 파라미터가 필수인지 아닌지 설정한다. (기본값 true)
null과 "" (빈 문자열)은 다르다.
"/request-param?username="와 같은 요청은 username에 빈문자열이 전달된다. (오류 발생X)
"/request-param?age=12" 와 같은 경우에는 아래의 코드에서 username이 null로 전달되므로 에러(400)가 발생한다.
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true, defaultValue = "guest") String username,
@RequestParam(required = false, defaultValue ="-1") int age
)
{
log.info("username={}, age={}", username, age);
return "ok";
}