@RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java 코드에서 사용할 수 있는 오브젝트로 만들어주는 공통점이 있다.
하지만 이 두 애너테이션은 세부 수행 동작에서 큰 차이를 보인다.
@RequestBody
클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환하는 것.
HTTP 요청 본문 데이터는 Spring에서 제공하는 HttpMessageConverter를 통해 타입에 맞는 객체로 변환된다.
1. @RequestBody를 사용하면 요청 본문의 JSON, XML, Text 등의 데이터가 적합한 HttpMessageConverter를 통해 파싱되어 Java 객체로 변환 된다.
2. @RequestBody를 사용할 객체는 필드를 바인딩할 생성자나 setter 메서드가 필요없다.
3. 다만 직렬화를 위해 기본 생성자는 필수다.
4. 또한 데이터 바인딩을 위한 필드명을 알아내기 위해 getter나 setter 중 1가지는 정의되어 있어야 한다.
@ModelAttribute
클라이언트가 보내는 HTTP 파라미터들을 특정 Java Object에 바인딩(맵핑) 하는 것.
/modelattribute?name=req&age=1 같은 Query String 형태 혹은 요청 본문에 삽입되는 Form 형태의 데이터를 처리한다.
1. @ModelAttribute를 사용하면 HTTP 파라미터 데이터를 Java 객체에 맵핑한다.
2. 따라서 객체의 필드에 접근해 데이터를 바인딩할 수 있는 생성자 혹은 setter 메서드가 필요하다.
3. Query String 및 Form 형식이 아닌 데이터는 처리할 수 없다.
요약
@ModelAttribute는 Http 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용한다.
@RequestBody는 Http Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용한다.
'Spring' 카테고리의 다른 글
쿠키와 보안문제 (0) | 2023.06.27 |
---|---|
로그인 처리 (쿠키) (0) | 2023.06.27 |
메시지, 국제화 (1) | 2023.06.16 |
주요 annotation (0) | 2023.06.07 |
Thymeleaf (0) | 2023.06.05 |