본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : HTTP 요청 메시지 - 단순 텍스트 관련 알아보기

by 오주현 2022. 1. 26.
반응형

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편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

반응형

댓글