@RequestBody와 @ModelAttribute는 Spring MVC에서 요청 데이터를 컨트롤러 메서드의 파라미터로 바인딩하는 두 가지 주요 방법이다. 둘 다 요청 데이터를 처리하지만, 사용하는 방식과 목적이 다르다.
💻 @RequestBody
- 용도: HTTP 요청의 본문(body)을 직접 객체로 변환. 주로 JSON, XML 등의 형식으로 요청 본문이 전송될 때 사용돤다.
- 사용 예:
- 클라이언트가 JSON 형태의 데이터를 서버로 전송할 때
- RESTful API에서 JSON/XML과 같은 데이터를 처리할 때
- 예제:
@PostMapping(value = "/words/popup/jquery")
public String operate(@RequestBody ConditionDto conditionDto, Model model) {
// conditionDto는 JSON 요청 본문에서 변환된 객체
}
- 설명: 이 경우 @RequestBody는 클라이언트에서 전송된 JSON 데이터를 ConditionDto 객체로 변환합니다. 클라이언트가 JSON 형태로 데이터를 전송하고 있기 때문에 @RequestBody를 사용하는 것이 적절합니다.
💻 @ModelAttribute
- 용도: 요청 매개변수(request parameters)나 폼 데이터를 객체로 변환. 주로 HTML 폼에서 전송된 데이터나 쿼리 파라미터를 처리할 때 사용됩니다.
- 사용 예:
- HTML 폼에서 전송된 데이터를 서버로 전송할 때
- URL 쿼리 파라미터를 객체로 변환할 때
- 예제:
@PostMapping("/words/popup")
public String operate(@ModelAttribute ConditionDto conditionDto, Model model) {
// conditionDto는 폼 데이터에서 변환된 객체
}
- 설명: 이 경우 @ModelAttribute는 클라이언트가 폼 데이터를 ConditionDto 객체로 변환하여 전달합니다. 폼 데이터는 일반적으로 application/x-www-form-urlencoded 형식으로 전송
왜 @RequestBody를 사용하는가?
- 데이터 형식: AJAX 요청에서 JSON 형식의 데이터를 전송하는 경우 @RequestBody를 사용한다다. JSON은 복잡한 데이터 구조를 전송할 때 유용하며, 이를 객체로 변환하려면 @RequestBody가 적합하다.
- 복잡한 데이터 구조: JSON 형식의 데이터는 중첩된 구조를 가질 수 있으므로, 이를 객체로 변환하기 위해 @RequestBody를 사용한다.
결론
- @RequestBody는 클라이언트에서 JSON, XML 등으로 전송된 데이터를 객체로 변환할 때 사용.
- @ModelAttribute는 HTML 폼 데이터나 URL 쿼리 파라미터를 객체로 변환할 때 사용.
따라서, JSON 데이터가 AJAX 요청으로 전송될 때는 @RequestBody가 적절하며, 폼 데이터가 전송될 때는 @ModelAttribute를 사용하면 된다.
'Develop > Spring' 카테고리의 다른 글
[Spring]Filter와 Interceptor의 개념 및 차이 (0) | 2024.10.17 |
---|---|
[Spring] Validator의 주요개념과 적용 방법 (0) | 2024.10.02 |
RedirectAttributes란 무엇일까 (0) | 2024.07.12 |
@Component 어노테이션과 Validator (0) | 2024.07.10 |
파일 첨부 할때의 두가지 방법(파일서버 사용, 로컬경로 업로드) (0) | 2024.06.28 |