Spring Boot 강좌6 : HTTP 데이터를 객체로 처리하는 방법

coldrice99·2024년 10월 1일
0

HTTP 데이터를 객체로 처리하는 방법

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

1. @ModelAttribute

  • @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 태그로부터 전달된 nameage 데이터를 Star 객체로 받아온다. 이때 Star 클래스에 필드와 setter 메서드가 정의되어 있어야 한다.
  • @ModelAttribute는 생략이 가능하며, Spring은 파라미터가 객체일 경우 자동으로 @ModelAttribute로 처리한다.

2. @RequestBody

  • @RequestBody는 HTTP 요청의 Body에 JSON 데이터를 담아 전달할 때 해당 데이터를 Java 객체로 변환해주는 어노테이션이다.
  • 일반적으로 JSON 데이터를 처리하는 데 사용되며, Content-Typeapplication/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);
}
  • 이 예제에서 클라이언트는 JSON 형식의 데이터를 HTTP Body에 담아 전송하고, 서버는 이를 @RequestBody를 통해 Star 객체로 매핑한다.

3. 주의할 점

  • 객체의 필드에 데이터를 설정하기 위해 gettersetter 메서드 또는 오버로딩된 생성자가 필요하다.
  • 만약 getter/setter가 없으면 데이터가 객체에 제대로 매핑되지 않을 수 있으므로 주의해야 한다.

4. 두 어노테이션의 차이점

  • @ModelAttribute: 주로 form 태그를 통해 데이터를 전송할 때 사용하며, 쿼리 파라미터 및 POST 방식의 x-www-form-urlencoded 형식을 지원한다.
  • @RequestBody: JSON 데이터를 처리할 때 사용하며, HTTP Body에 담긴 데이터를 Java 객체로 변환한다.

이러한 방법을 통해 클라이언트에서 전달되는 데이터를 Java 객체로 편리하게 매핑할 수 있으며, 상황에 따라 적절한 어노테이션을 선택하는 것이 중요하다.

profile
서두르지 않으나 쉬지 않고

0개의 댓글