HTTP message body에 직접 데이터를 담아 요청하는데 HTTP message body의 데이터를 InputStream을 사용해 직접 읽을 수 있다.
요청 파라미터와 달리 HTTP message body를 통해 데이터가 넘어 오는 경우엔 @RequestParam, @ModelAttribute를 사용할 수 없다.
@PostMapping("/request-body-string-v2")
public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException {
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody={}", messageBody);
responseWriter.write("ok");
}
InputStream은 Reader로 HTTP 요청 메시지 바디의 내용을 직접 조회한다. OutputStream은 Writer로 HTTP 응답 메시지의 바디에 직접 결과를 출력한다.
여기에서 HttpEntity를 사용해 코드를 조금 더 줄일 수도 있다. HttpEntity는 HTTP 헤더와 바디 정보를 직접 조회할 수 있고 요청 파라미터를 조회하는 기능과는 관계가 없다고 한다. 또, 응답에도 사용이 가능해서 메시지 바디 정보를 직접 반환한다고 한다. 헤더 정보 또한 포함이 가능하며 View 조회는 하지 않는다.
@ResponseBody
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) {
log.info("messageBody={}", messageBody);
return ("ok");
}
코드를 4단계 간추려버린 내용이다.
강의에서 스프링의 발전 과정을 알려주려고 하고 있기 때문에 처음에는 코드가 길고 복잡하지만 가면 갈 수록 코드를 다듬어진 모양으로 볼 수 있게 된다. 이번에도 마찬가지로 마지막으로 다듬어진 코드이다.
@RequestBody를 사용해서 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다. 만약, 헤더 정보가 필요하다면 HttpEntity를 사용하거나 @RequestHeader를 사용하면 된다.
강의 자료에서는 요청 파라미터와 HTTP 메시지 바디를 비교하였는데 요청 파라미터를 조회하는 기능은 @ReuqestParam, @ModelAttribute가 있고 HTTP 메시지 바디를 직접 조회하는 기능은 @RequestBody가 있다.
@ResponseBody를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달할 수 있고 view는 이 경우에도 사용하지 않는다고 한다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 정적 리소스 및 뷰 템플릿 (0) | 2022.01.26 |
---|---|
[Spring Boot] : HTTP 요청 메시지 JSON (0) | 2022.01.26 |
[Spring Boot] : HTTP 요청 파라미터 - @ModelAttribute (0) | 2022.01.25 |
[Spring Boot] : HTTP 요청 파라미터 - @RequestParam (0) | 2022.01.25 |
[Spring Boot] : HTTP 요청 파라미터 , 쿼리 파리미터, HTML Form (0) | 2022.01.25 |
댓글