T_era
HTTP Message Body (요청) 본문
- 본 내용은 HTTP Message Body에 직접적으로 데이터가 전달되는 경우, 즉 Request Body의 데이터를 바인딩하는 방식에 대한 설명이다. 이는 REST API에서 주로 사용되며, HTTP Method POST, PUT, PATCH 등에서 주로 활용된다.
- GET 메서드에서도 Request Body가 존재할 수 있으나 권장되지는 않는다. 데이터 형식으로는 JSON, XML, TEXT 등이 사용된다.
- @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 |