25.03.06 TIL @RequestBody vs @RequestParam vs @ModelAttribute

신성훈·2025년 3월 6일
0

TIL

목록 보기
142/162

1. 개요

Spring MVC에서 클라이언트의 요청 데이터를 컨트롤러에서 받을 때 @RequestBody, @RequestParam, @ModelAttribute를 사용합니다.
각 어노테이션은 데이터 바인딩 방식과 사용 목적이 다르므로 상황에 맞게 선택해야 합니다.


2. @RequestBody

특징

  • HTTP 요청의 Body(본문)에 담긴 데이터를 객체로 변환하여 매핑
  • JSON, XML 등의 데이터를 Java 객체로 변환
  • @RequestBody를 사용하면 객체의 필드와 JSON 데이터가 매핑
  • 주로 API에서 JSON 데이터를 받을 때 사용

예제

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/create")
    public String createUser(@RequestBody UserDTO userDTO) {
        return "User created: " + userDTO.getName();
    }
}
{
  "name": "Alice",
  "age": 25
}
  • JSON 요청 데이터를 UserDTO 객체에 바인딩
  • 주로 REST API에서 JSON 요청을 처리할 때 사용

3. @RequestParam

특징

  • 요청 URL의 Query Parameter(쿼리 스트링) 또는 Form 데이터를 개별 변수로 받음
  • 데이터가 단순한 경우(숫자, 문자열 등) 사용
  • 필수 여부(required = false), 기본값 설정 가능

예제

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/find")
    public String findUser(@RequestParam String name, 
                           @RequestParam(defaultValue = "0") int age) {
        return "User: " + name + ", Age: " + age;
    }
}

요청 예시:

GET /users/find?name=Alice&age=25
  • name=Alice&age=25@RequestParam을 사용하여 각각의 변수로 받음
  • URL 쿼리 스트링에서 데이터를 가져올 때 사용

4. @ModelAttribute

특징

  • 폼 데이터를 객체로 바인딩
  • 요청 파라미터(?name=Alice&age=25)를 DTO나 VO 객체로 변환
  • 객체에 자동으로 값이 매핑되며, 유효성 검증(@Valid)도 가능
  • Spring MVC에서 폼 데이터를 처리할 때 주로 사용

예제

@Controller
@RequestMapping("/users")
public class UserController {

    @PostMapping("/update")
    public String updateUser(@ModelAttribute UserDTO userDTO) {
        return "User updated: " + userDTO.getName();
    }
}

요청 예시 (폼 데이터 전송):

POST /users/update
Content-Type: application/x-www-form-urlencoded

name=Alice&age=25
  • 폼 데이터를 객체에 바인딩하여 처리
  • HTML 폼 데이터 전송 시 사용

5. 비교 정리

어노테이션데이터 전달 방식주요 사용 사례
@RequestBodyBody(JSON, XML)REST API에서 JSON 요청 처리
@RequestParamQuery Parameter / Form Data단순 값(문자열, 숫자 등) 전달
@ModelAttributeQuery Parameter / Form Data → 객체 변환HTML 폼 데이터 처리

6. 마무리

Spring에서 클라이언트의 데이터를 받을 때 어떤 방식으로 전달되는지에 따라 적절한 어노테이션을 선택해야 한다는 점을 배웠습니다.

  • JSON API 요청이면 @RequestBody
  • URL 쿼리 파라미터면 @RequestParam
  • 폼 데이터 객체 매핑이면 @ModelAttribute를 사용해야 함을 알게 되었습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글