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 객체로 편리하게 매핑할 수 있으며, 상황에 따라 적절한 어노테이션을 선택하는 것이 중요하다.