개발놀이터

스프링 HTTP 요청 메시지 - 단순 텍스트 본문

Spring/Spring

스프링 HTTP 요청 메시지 - 단순 텍스트

마늘냄새폴폴 2021. 8. 19. 10:04

*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