[Spring] HTTP 요청메시지- 단순텍스트

내용
HTTP 요청메시지 조회하는방법(@RequestBody@ResponseBody)
진행일시
2022/09/13
속성

1. [HTTP 요청메시지 ]

HTTP message body에 데이터를 직접담아서 요청
HTTP API에서 주로 사용, JSON, XML, TEXT
데이터 형식은 주로 JSON 사용
POST, PUT, PATCH
요청 파라미터와 다르게 HTTP 메시지 바디를 통해 데이터가 직접 넘어오는경우는 @RequestParam, @ModealAttribute를 사용할 수 없다. (물론 HTML Form 형식으로 전달되는 경우는 요청파라미터로 인정된다)
먼저 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하는 예시코드는 아래와 같다.
HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다
public class ReqeustBodyStringController { @PostMapping('/test') public void requestbodyStringV1(HttpServletReqeust request, HttpServletResponse response) throws IOException{ String inputStream = request.getInputStream(); String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); log.info("messageBody={}", messageBody); response.getWriter().write("ok"); } }
Java
복사
InputStream(Reader) : HTTP 요청 메시지 바디의 내용을 직접조회
OutPutStream(Writer) : HTTP 응답 메시지의 바디에 직접결과 출력
아래는 예시코드다
@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"); }
Java
복사
위에 2가지 방법보다 더 간결하게 body를 조회할 수 있는방법이 있다
HttpEntity를 이용하는것이다.
@PostMapping("/request-body-string-v3") public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) { String messagebody = httpEntity.getBody(); log.info("messagebody-v3 = {}", messagebody); return new HttpEntity<>("ok"); }
Java
복사

스프링 MVC는 다음 파라미터를 지원한다.

HttpEntity : HTTP header, body정보를 편리하게 조회
메시지 바디 정보를 직접 조회
요청 파라미터를 조회하는 기능과 관계없음 (@RequestParam,@ModelAttribute랑 전혀상관없다!!!)
HttpEntity는 응답에도 사용가능
메시지 바디 정보 직접 반환
헤더 정보 포함기능
view 조회 x
@PostMapping("/request-body-string-v3") public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) { String messagebody = httpEntity.getBody(); log.info("messagebody-v3 = {}", messagebody); return new HttpEntity<>("ok"); }
Java
복사
HttpEntity를 상속받은 다음 객체들도 같은 기능을 제공하낟
RequestEntity
HttpMethod,url정보가 추가, 요청에서 사용
ResponseEntiy
Http 상태코드 설정가능, 응답에서 사용
return new ResponseEntity<String>(”Hello World”, responseHeaders, HttpStatus.CREATED)
실무에서 많이 쓰는 더 간단한 방법이 있다
@RequestBody 를 이용하는 방식이다
@ㄲ
@RequestBody 를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회 할 수 있다. 참고로 헤더 정보가 필요하다면 HttpEntity를 사용하거나 @RequestHeader를 사용하면된다. 이렇게 메시지 바디를 직접조회하는 기능은 요청파라미터 RequestParam, ModelAttribute와 전혀 상관없다
[ 요청파라미터 vs HTTP 메시지 바디]
요청파라미터를 조회하는 기능 @RequestParam, @ModelAttribute
HTTP 메시지 바디를 직접조회하는 기능 @RequestBody
@ResponseBody 를 사용하면 응답결과를 HTTP 메시지 바디에 직접담아서 전달할 수 있다.물론 이 경우에도 view를 사용하지않는다