T_era

HTTP Message Body (요청) 본문

Programing/Spring

HTTP Message Body (요청)

블스뜸 2025. 5. 7. 11:59
  1. 본 내용은 HTTP Message Body에 직접적으로 데이터가 전달되는 경우, 즉 Request Body의 데이터를 바인딩하는 방식에 대한 설명이다. 이는 REST API에서 주로 사용되며, HTTP Method POST, PUT, PATCH 등에서 주로 활용된다.
  2. GET 메서드에서도 Request Body가 존재할 수 있으나 권장되지는 않는다. 데이터 형식으로는 JSON, XML, TEXT 등이 사용된다.
  3. @RequestParam 및 @ModelAttribute는 GET + Query Parameter와 POST HTML Form Data 바인딩 방식이다.

HTTP Request Body에 데이터가 전송되는 경우, HttpMessageConverter를 통해 데이터가 바인딩된다.
현대적인 RESTful API에서는 대부분 JSON 형식을 사용한 통신이 이루어진다.

HttpServletRequest 예시

@Slf4j
@Controller
public class RequestBodyStringController {

    @PostMapping("/v1/request-body-text")
    public void requestBodyTextV1(
            HttpServletRequest request,
            HttpServletResponse response
    ) throws IOException {

        ServletInputStream inputStream = request.getInputStream();
        String bodyText = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        response.getWriter().write("response = " + bodyText);

    }

}

request.getInputStream()을 통해 HTTP Request Body의 데이터를 직접 조회한다.

I/O 예시

InputStream (읽기) 파라미터는 HTTP Request Body 데이터를 직접 조회하는 데 사용된다. OutputStream (쓰기) 파라미터는 HTTP Response Body에 직접 결과를 출력하는 데 사용된다.

@PostMapping("/v2/request-body-text")
public void requestBodyTextV2(
                InputStream inputStream,
                Writer responseWriter
) throws IOException {

    String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

    responseWriter.write("response = " + body);
}

HttpEntity 예시

HttpEntity를 사용하면 HttpMessageConverter가 자동으로 동작하여 요청 데이터를 바인딩한다 (자세한 내용은 추후 설명).

@PostMapping("/v3/request-body-text")
public HttpEntity<String> requestBodyTextV3(HttpEntity<String> httpEntity) {

    // HttpMessageConverter가 동작하여 아래 코드가 수행됨
    String body = httpEntity.getBody();

    return new HttpEntity<>("response = " + body); // 매개변수 = Body Message

}

Spring의 HttpMessageConverter 덕분에 Request Data에 간편하게 접근 가능하다. HttpEntity를 사용하면 HttpMessageConverter가 동작하여 자동으로 매핑된다. 요청뿐만 아니라 응답까지 HttpEntity 하나로 처리가 가능하다.

'Programing > Spring' 카테고리의 다른 글

JSON 데이터 처리 (@RestController)  (0) 2025.05.07
HttpEntity와 더 편리한 방법  (0) 2025.05.07
@RequestParam과 @ModelAttribute  (0) 2025.05.07
Client에서 Server로 데이터 전달 방식 정리  (0) 2025.05.06
MultiValueMap  (0) 2025.05.06