개발놀이터
스프링 HTTP 요청 메시지 - 단순 텍스트 본문
*HTTP 요청 메시지 - 단순 텍스트
HTTP message body에 데이터를 직접 담아서 요청
-HTTP API에서 주로 사용, JSON, XML, TEXT
-데이터 형식은 주로 JSON 사용
-POST, PUT, PATCH 사용가능
요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우는 @RequestParam, @ModelAttribute를 사용할 수 없다.
이럴때는 InputStream으로 메시지 바디에 있는 내용을 읽어올 수 있다.
@PostMapping("/request-body-string-v1")
public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody={}", messageBody);
response.getWriter().write("ok");
}
매개변수를 InputStream, Writer등으로 읽어올 수도 있다.
@PostMapping("/request-body-string-v2")
public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws ServletException, IOException {
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody={}", messageBody);
responseWriter.write("ok");
}
스프링에서 제공하는 messageConverter를 이용하면 InputStream이런거 사용 안하고 편리하게 사용할 수 있다.
@PostMapping("/request-body-string-v3")
public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) throws ServletException, IOException {
String messageBody = httpEntity.getBody();
log.info("messageBody={}", messageBody);
return new HttpEntity<>("ok");
}
스프링은 HttPEntity는 HTTP header, body 정보를 편리하게 조회할 수 있다.
-메시지 바디 정보를 직접 조회
-요청 파라미터를 조회하는 기능과 관계 없음
HttpEntity는 응답에도 사용 가능
-메시지 바디 정보 직접 변환
-헤더 정보 포함 가능
-view 조회 X
@RequestBody 어노테이션을 이용한 더욱 더 간단한 방법이 있다. //이방법이 실무에서 가장 많이 쓰인다.
@ResponseBody
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) throws ServletException, IOException {
log.info("messageBody={}", messageBody);
return "ok";
}
@RequestBody를 사용하면 HTTP메시지 바디 정보를 편리하게 조회할 수 있다. 참고로 헤더 정보가 필요하다면 HttpEntity를 사용하거나 @RequestHeader를 사용하면 된다.
*요청 파라미터 vs HTTP 메시지 바디
-요청 파라미터를 조회하는 기능 : @RequestParam, @ModelAttribute
-HTTP 메시지 바디를 직접 조회하는 기능 : @RequestBody
'Spring > Spring' 카테고리의 다른 글
스프링 HTTP응답 - 정적 리소스, 뷰 템플릿 (0) | 2021.08.19 |
---|---|
스프링 HTTP요청 메시지 - JSON (0) | 2021.08.19 |
스프링 요청파라미터 (0) | 2021.08.19 |
스프링 요청매핑 (0) | 2021.08.19 |
스프링 로깅 (0) | 2021.08.19 |