본문 바로가기

미역/자바

@RequestParam / @RequestBody / @ModelAttribute

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