@RequestBody는 Spring Framework에서 HTTP 요청의 본문(body)을 자바 객체로 변환하기 위해 사용되는 어노테이션이다.
주로 RESTful API에서 클라이언트가 전송한 데이터(JSON, XML 등)를 서버 측에서 객체로 받을 때 활용된다.
HTTP Body 파싱
요청의 본문(body)을 읽어 Java 객체로 변환한다.
예: 클라이언트가 {"name": "John", "age": 30}을 전송하면, User 객체의 필드에 매핑된다.
MessageConverter 사용
Spring은 요청의 Content-Type 헤더를 기반으로 적절한 HttpMessageConverter를 선택한다.
MappingJackson2HttpMessageConverter (Jackson 라이브러리 사용) Jaxb2RootElementHttpMessageConverter 사용 예시 (컨트롤러)
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
// user 객체 활용 (ex: DB 저장)
return ResponseEntity.ok(user);
}
유효성 검증
@Valid와 결합해 객체의 유효성을 검사할 수 있다.
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user) {
// 유효성 통과 시 로직 실행
}
POST, PUT, PATCH와 같이 본문이 필요한 메서드에서 사용합니다. GET에서는 권장되지 않는다.Content-Type(ex: application/json)을 헤더에 명시해야 한다.HttpMessageNotReadableException이 발생하므로, 예외 핸들링이 필요하다.@Valid와 함께 사용.요청
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로 매핑하여 메서드의 매개변수로 전달하는 것이다.