컨트롤러 @RequestMapping
어노테이션이 적용된 메서드는 커맨드 클래스 뿐만 아니라, HttpServletRequest, HttpSession, Locale 등 웹 애플리케이션과 관련된 다양한 타입의 파라미터를 가질 수 있습니다.
httpServletRequest.getParameter()
@RequestMapping("/test")
public String test(HttpServletRequest req) {
String userId = req.getParameter("userId");
return "test";
}
getParameter()는 String 값을 반환합니다.
httpServletRequest.getAttribute()
@RequestMapping("/test")
public String test(HttpServletRequest req) {
String userId = req.getAttribute("userId");
return "test";
}
getAttribute()는 getParameter()와 비슷하지만 String 값이 아닌 Object 값을 반환한다는 차이가 있습니다.
@RequestParam
@RequestMapping("/test", method=RequestMethod.GET)
public String test(@RequestParam(value="userId", defaultValue="ooeunz") String userId) {
return "test";
}
@RequestParam
은 query string 방식으로 url을 통해 parameter로 값을 받아옵니다. 갖고있는 속성으로는 value, required, defaultValue가 있습니다.
@PathVariable
@RequestMapping("/test/{email}", method=RequestMethod.GET)
public String test(@PathVariable("email") String email) {
return "test";
}
@Pathvariable
애노테이션은 RequestMapping에 {email} 이라는 부분에 맵핑됩니다. query string 방식과 path value 방식을 이해하고 있다면 별로 어렵지 않게 사용하실 수 있을거라 생각합니다.
@RequestBody
GET방식은 request packet에 http body가 존재하지 않습니다. 따라서 @RequestBody
로 받으려면 반드시 POST 방식을 사용해야 합니다. @RequestBody
는 JSON이나 XML과 같은 데이터를 받거나 DTO/VO 객체 전체를 받을 경우 사용합니다.
@RequestMapping("/test")
public String test(@RequestBody Map<String, Obejct> obj) {
Account account = obj.get("account");
return "test";
}
@ModelAttribute
@RequestParam
과 비슷한데 1:1로 parameter를 받을 경우엔 @RequestParam을 사용하고 DTO/VO와 같이 객체 전체로 받을 경우 @ModelAttribute
로 받을 수 있습니다. 예를들어 form에서 데이터를 받을 경우 form name과 DTO/VO의 변수 명을 같게 해줌으로써 자동으로 데이터를 바인딩할 수 있습니다.
@RequestMapping("/test")
public String test(@ModelAttribute UserDto user) {
System.out.println(user.getUserId());
return "test";
}