HTTP Message Body(요청)
@RequestParam, @ModelAttribute는 GET + Query Parameter와, POST HTML Form Data를 바인딩하는 방법이다.
이 내용은 HTTP Message Body에 직접적으로 Data가 전달되는 경우이다.
REST API에서 주로 사용하는 방식이다.
HTTP Method POST, PUT, PATCH에서 주로 사용한다.
JSON, XML, TEXT 등을 데이터 형식으로 사용한다.
HTTP Message 구조

-HTTP Request, Response 예시

Server에서 Request로 전달받은 Data를 처리하기 위해서 바인딩 해야 한다.
ex) JSON → Object
TEXT
HTTP Request Body에 Data가 전송되는 경우 HttpMessageConverter(중요)를 통해 바인딩된다.
현대에는 Restful API를 주로 사용하고 있어서 대부분의 경우 JSON 형식으로 통신한다.
- `request.getInputStream();`
java
@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);
}
}


@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 = " + bodyText);
}

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
}

Converter는 어떤 뭔가를 다른 뭔가로 바꿔주는(Convert) 장치를 말한다. 예를 들면 태양빛을 전기로 바꿔주는 장치 또한 컨버터이다.