@RequestBody란?

상혁몬·2025년 2월 6일

Backend

목록 보기
9/9

@RequestBody는 Spring Framework에서 HTTP 요청의 본문(body)을 자바 객체로 변환하기 위해 사용되는 어노테이션이다.
주로 RESTful API에서 클라이언트가 전송한 데이터(JSON, XML 등)를 서버 측에서 객체로 받을 때 활용된다.

주요 특징 및 동작 방식

  1. HTTP Body 파싱
    요청의 본문(body)을 읽어 Java 객체로 변환한다.
    예: 클라이언트가 {"name": "John", "age": 30}을 전송하면, User 객체의 필드에 매핑된다.

  2. MessageConverter 사용
    Spring은 요청의 Content-Type 헤더를 기반으로 적절한 HttpMessageConverter를 선택한다.

    • JSON ➡️ MappingJackson2HttpMessageConverter (Jackson 라이브러리 사용)
    • XML ➡️ Jaxb2RootElementHttpMessageConverter
    • (Spring Boot는 자동으로 Jackson을 설정한다.)
  3. 사용 예시 (컨트롤러)

    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // user 객체 활용 (ex: DB 저장)
        return ResponseEntity.ok(user);
    }
  4. 유효성 검증
    @Valid와 결합해 객체의 유효성을 검사할 수 있다.

    @PostMapping("/users")
    public ResponseEntity<?> createUser(@Valid @RequestBody User user) {
        // 유효성 통과 시 로직 실행
    }

주의사항

  • HTTP 메서드: 주로 POST, PUT, PATCH와 같이 본문이 필요한 메서드에서 사용합니다. GET에서는 권장되지 않는다.
  • Content-Type: 클라이언트는 요청 시 올바른 Content-Type(ex: application/json)을 헤더에 명시해야 한다.
  • 에러 처리: 잘못된 형식의 데이터 전송 시 HttpMessageNotReadableException이 발생하므로, 예외 핸들링이 필요하다.

활용 시나리오

  • REST API 개발: 클라이언트(React, Angular 등)가 JSON 데이터를 전송할 때.
  • 마이크로서비스 통신: 서비스 간 데이터를 객체로 직렬화/역직렬화할 때.
  • 유효성 검증: 전송 데이터의 필수 값, 형식 등을 검증할 때 @Valid와 함께 사용.

예제 코드 (JSON 요청)

요청

POST /users HTTP/1.1
Content-Type: application/json

{
  "name": "Alice",
  "email": "alice@example.com"
}

컨트롤러

@RestController
public class UserController {
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // user 객체 처리
        return user;
    }
}

User 클래스

public class User {
    private String name;
    private String email;
    // getter, setter, 생성자
}

이렇게 하면 Spring이 자동으로 JSON을 User 객체로 변환해 전달한다.

즉, @RequestBody란? 클라이언트가 전송한 사용자 정보를 DTO로 매핑하여 메서드의 매개변수로 전달하는 것이다.

0개의 댓글