Spring Controller

꿈나무기록장·2021년 1월 27일
0

2021웹캠프정리

목록 보기
23/25

Controller Method Parameter Type

컨트롤러 @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";
}


Controller Method Retuern Type

profile
초보자가 기록하는 곳

0개의 댓글