1. @RequestParam
- 1개의 HTTP 요청 파라미터를 받는다.
- [required = true]가 기본값이라서 꼭 필요한 게 아니면 [required = false]로 설정하는 게 좋다. 나중에 에러나지 않도록.
- @RequestParam Map<String, Object> ~~~ 를 쓰면 한 번에 여러 파라미터를 받아올 수 있지만 어떤 파라미터를 받았는지 명확하게 알 수가 없다는 단점이 있다.
2. @RequestBody
- Json(application/json) 형태의 HTTP Body를 객체로 변환시켜준다.
- 때문에 HTTP Body가 없는 Get메소드에서 사용한다면 에러가 발생한다.
- Spring에서 관리하는 MessageConverter가 Java 객체로 변환시켜주는 거여서 @ModelAttribute와 달리 반드시 생성자나 Setter가 필요하지 않다.
3. @ModelAttribute
- multipart/form-data 형태의 HTTP Body 내용을 객체로 받아온다.
- 또는, HTTP 요청 파라미터의 값들을 객체로 받아온다. 생성자나 Setter를 사용한다. 때문에 파라미터 값을 주입할 생성자나 Setter가 없으면 매핑되지 않는다.
- 가장 많은 파라미터를 받는 생성자를 통한 주입 후에 아직 주입받지 못한 필드는 Setter 주입을 한다.
3-1. Model / ModelMap / ModelAndView
- Model이란 단어가 붙어있어서 @ModelAttribute랑 뭐 비슷한 건가 하는 바보같은 생각으로 추가 조사했다. 그냥 따로 생각하는 게 편하다.
- @ModelAttribute는 View의 정보를 Controller로 호출하는 거고 Mdoel 객체는 Controller에서 생성된 데이터를 View로 넘길 때 사용하는 객체다. Servlet의 request.setAttribute()와 같다.
- Model은 Interface이고 ModelMap은 구현체다. 즉, 딱히 다른 게 없다.
- ModelAndView는 말 그대로 Model 객체의 기능과 View의 기능을 같이 가진 객체이다.
>> ex) ModelAndView mav = new ModelAndView("/test/index.jsp");
mav.addObject("data", "testing");
return mav;
참고한 글
https://mangkyu.tistory.com/72
[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이
이번에는 Spring에서 Client로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들에 대해서 알아보도록 하겠습니다. 1. RequestBody, ModelAttribute, RequestParam이란? [ @RequestParam ] @RequestParam은..
mangkyu.tistory.com
'미역 > 자바' 카테고리의 다른 글
<form:form>에서 Equal symbol expected (0) | 2022.06.20 |
---|---|
[파이썬] 소수 구하기 (0) | 2022.04.22 |
엑셀 시트 읽어오기 (0) | 2022.04.22 |
Map.Entry (0) | 2022.01.20 |
Optional에 대하여 (0) | 2021.12.16 |