@RequestBody 어노테이션은 스프링 MVC에서 HTTP 요청 본문을 자바 객체로 변환할 때 사용하는 어노테이션입니다.
기본적인 사용 방법은 다음과 같습니다:
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// user 객체를 이용한 사용자 생성 로직
return userService.createUser(user);
}
}
@Valid 어노테이션과 함께 사용하여 입력 데이터를 검증할 수 있습니다.복잡한 객체 구조도 처리할 수 있습니다:
public class Order {
private List<OrderItem> items;
private Address shippingAddress;
// getters and setters
}
@PostMapping("/orders")
public Order createOrder(@RequestBody Order order) {
return orderService.createOrder(order);
}
@Valid 어노테이션과 함께 사용하여 입력 데이터를 검증할 수 있습니다:
@PostMapping("/users")
public User createUser(@Valid @RequestBody User user) {
return userService.createUser(user);
}
특별한 형식의 데이터를 처리해야 할 경우, 커스텀 HttpMessageConverter를 구현하고 등록할 수 있습니다:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyCustomMessageConverter());
}
}
요청 본문을 객체로 변환하는 과정에서 문제가 발생하면 HttpMessageNotReadableException이 발생할 수 있습니다. 이를 전역적으로 처리하려면:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<String> handleHttpMessageNotReadable(HttpMessageNotReadableException ex) {
return new ResponseEntity<>("Malformed JSON request", HttpStatus.BAD_REQUEST);
}
}
@RequestBody가 적용된 컨트롤러 메서드를 테스트할 때:
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Test
void testCreateUser() throws Exception {
User user = new User("John", "john@example.com");
mockMvc.perform(post("/users")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("John"));
}
}
Content-Type 헤더가 올바르게 설정되어 있어야 합니다.@Valid를 사용하여 입력 데이터를 검증하세요.@RequestBody는 RESTful API 개발에서 매우 유용한 어노테이션입니다. HTTP 요청 본문을 자바 객체로 쉽게 변환할 수 있게 해주며, 이를 통해 클라이언트와 서버 간의 복잡한 데이터 교환을 간단하게 처리할 수 있습니다. 올바르게 사용하면 코드의 가독성을 높이고 개발 생산성을 향상시킬 수 있습니다. 다만, 데이터 검증과 보안 측면에서 주의가 필요하며, 적절한 예외 처리와 문서화가 동반되어야 합니다.
@RestController
@PostMapping
@Valid
@ControllerAdvice
@RequestParam