Spring Controller에서 데이터를 받아오는 방법에 대해서 살펴보겠습니다.
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.getParameter("userId");
return "test";
}
getAttribute()는 getParameter()와 비슷하지만 String 값이 아닌 Object 값을 반환한다는 차이가 있습니다.
@RequestParam
@RequestMapping(value="/test", method=RequestMethod.GET)
public String test(@RequestParam(value="userId", defaultValue="ooeunz") String userId) {
return "test";
}
@RequestParam은 query string 방식으로 url을 통해 parameter로 값을 받아옵니다. 갖고있는 속성으로는 value, required, defaultValue가 있습니다.
- value는 위의 코드에서 알 수 있듯이 query string으로 받아오는 key값을 의미하고 뒤에 오는 변수에 해당 값을 바인딩합니다.
- required값은 true일 경우 parameter가 반드시 url에 담겨있어야 합니다. 없을경우 400값을 반환하게 됩니다.
- defaultValue는 디폴트 값을 의미합니다.
※ Query String 방식과 path value 방식이 무엇인지 모른다면 아래 url을 참고하시기 바랍니다.
@PathVariable
@RequestMapping(value="/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";
}
'Server > Spring (Boot & Framework)' 카테고리의 다른 글
[Spring] Spring MVC: Controller return 타입 (0) | 2020.04.06 |
---|---|
[Spring] Spring 4.3: @RequestMapping, @GetMapping, @PostMapping (0) | 2020.04.06 |
[Spring] DI? IoC Container? Bean? 숲을 보는 게시물 (1) | 2020.01.29 |
[Spring] Spring Security 1.5 -> 2.x 버전 업데이트에 따른 변화 (0) | 2020.01.09 |
[Spring] 프로젝트 생성하기 (0) | 2019.11.15 |