Develop/Spring

@RequestBody와 @ModelAttribute

롱하 2024. 8. 1. 14:57

@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를 사용하면 된다.