Controller에서 parameter를 받는 방법에는 여러가지가 있는데, 좀 더 확실하게 알고 쓰면 개발하는데에 도움이 될 것 같아 찾아보고 정리하게 되었다.
내가 주로 사용하는 방법은 @RequestParam, @RequestBody, @ModelAttribute 이렇게 세가지 정도가 있었다.
@RequestParam 사용
GET 요청일 때 사용한다.
url?idx=1 에서 url 뒤에 붙는 idx 파라미터를 통해 Controller에서 idx=1이라는 값을 받게 된다.
controller에서는 아래처럼 @RequestParam을 사용해서 값을 한개 씩 받아 올 수 있다.
개별적으로 받는 경우
1 | private String test (int idx) { |
파라미터를 일일이 지정하지 않고 Map으로 담아서 간단하게 받아올 수 있다.
Map으로 받는 경우
1 | private String test ( Map<String, String> params){ |
@RequestBody 사용
POST 요청일 때 사용한다.
Http요청 Body를 Java 객체로 전달해준다. 그러므로 Body가 존재하지 않는 GET 방식의 메소드에 @RequestBody를 사용하는 것은 적합하지 않고 POST요청일때 사용되어야한다.
특히 @ResponseBody와 함께 Json형식의 데이터들을 주고 받으며 Ajax통신을 할 때 주로 사용된다.
RequestBody를 이용해 받는 경우
1 |
|
@RequestBody 와 @ResponseBody
- @RequestBody : Http요청의 body 내용을 자바 객체로 매핑하는 역할
- @ResponseBody : 자바 객체를 Http요청의 body 내용으로 매핑하는 역할
@ModelAttribute 사용
클라이언트가 전송하는 여러 파라미터들을 1대1로 객체에 바인딩하고 다시 View로 넘겨서 출력해준다. 객체를 바인딩 하기 때문에 JSP에서 Form 태그를 통해 전달 받은 파라미터들을 객체로 바인딩 시키는 경우에 사용할 수 있다.
내가 이해한 @ModelAttribute는 @ModelAttribute를 사용하려면 객체가 있어야하고, getter와 setter가 있어야 한다. 만약 전달 받고 싶은 데이터가 추가가 된다면 객체(DTO)에 추가가 되어야하고, getter / setter 또한 추가가 되어야한다.
ModelAttribute로 받는 경우
1 | public String list ( SearchDto searchDTO){ |
@ModelAttribute와 @RequestParam의 차이점
@ModelAttribute는 객체를 바인딩하고, @RequestParam은 단일요청 매개변수를 바인딩한다.
참고 사이트
@RequestBody와 @ResponseBody 개념
SpringMVC :: @RequestParam 을 이용한 값 받아오기
[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이