Spring에서 HTTP 요청 데이터를 Java 객체로 처리하는 방법에는 @ModelAttribute와 @RequestBody를 사용하는 방식이 있다. 이 두 어노테이션은 데이터를 객체로 받아올 때 각각 다른 상황에서 활용되며, 다양한 형태의 데이터를 효과적으로 다룰 수 있다.

@ModelAttribute는 HTML form을 통해 전달되는 데이터를 Java 객체로 자동 매핑해주는 어노테이션이다.POST 요청으로 전달되는 x-www-form-urlencoded 형식의 데이터를 객체로 처리할 수 있다.@PostMapping("/form/model")
@ResponseBody
public String helloRequestBodyForm(@ModelAttribute Star star) {
return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d)", star.name, star.age);
}
form 태그로부터 전달된 name과 age 데이터를 Star 객체로 받아온다. 이때 Star 클래스에 필드와 setter 메서드가 정의되어 있어야 한다.@ModelAttribute는 생략이 가능하며, Spring은 파라미터가 객체일 경우 자동으로 @ModelAttribute로 처리한다.@RequestBody는 HTTP 요청의 Body에 JSON 데이터를 담아 전달할 때 해당 데이터를 Java 객체로 변환해주는 어노테이션이다. Content-Type이 application/json인 경우에 활용된다.@PostMapping("/form/json")
@ResponseBody
public String helloPostRequestJson(@RequestBody Star star) {
return String.format("Hello, @RequestBody.<br> (name = %s, age = %d)", star.name, star.age);
}
@RequestBody를 통해 Star 객체로 매핑한다.getter와 setter 메서드 또는 오버로딩된 생성자가 필요하다.getter/setter가 없으면 데이터가 객체에 제대로 매핑되지 않을 수 있으므로 주의해야 한다.@ModelAttribute: 주로 form 태그를 통해 데이터를 전송할 때 사용하며, 쿼리 파라미터 및 POST 방식의 x-www-form-urlencoded 형식을 지원한다.@RequestBody: JSON 데이터를 처리할 때 사용하며, HTTP Body에 담긴 데이터를 Java 객체로 변환한다.이러한 방법을 통해 클라이언트에서 전달되는 데이터를 Java 객체로 편리하게 매핑할 수 있으며, 상황에 따라 적절한 어노테이션을 선택하는 것이 중요하다.