HTTP 요청 메시지 – 단순 텍스트

SHByun·2023년 1월 25일
0

강의 chap6-9


HTTP 요청 메시지 – 단순 텍스트

1. HTTP message body

  • 요청 파라미터와 다르게 HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우 @RequestParam, @ModelAttribute를 사용할 수 없다.
  • 단, HTML Form 형식으로 전달되는 경우 요청 파라미터로 인정된다.
  • InputStream을 통해 읽을 수 있다.

2. Input, Output 스트림

@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 응답 메시지의 바디에 직접 결과 출력한다.

3. HttpEntity

@PostMapping("/request-body-string-v2")
public HttpEntity<String> requestBodyStringV2(HttpEntity<String> httpEntity) throws IOException {

    String messageBody = httpEntity.getBody();
    log.info("messageBody = {}", messageBody);
    return new HttpEntity<>("ok");
}
  • HttpEntity: HTTP header, body 정보를 편리하게 조회할 수 있다.
    -> 메시지 바디 정보를 직접 조회한다.
    -> 요청 파라미터를 조회하는 기능과 관계가 없다.(@RequestParam, @ModelAttribute 관련 없음)
    -> 응답에도 사용이 가능하다.
    -> View를 조회하지 않는다.
  • 스프링 MVC 내부에서는 HTTP body message를 읽어서 문자나 객체로 변환해준다.
    -> HTTPMessageConverter 기능을 사용

4. @RequestBody

@ResponseBody
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) throws IOException {

    log.info("messageBody = {}", messageBody);
    return "ok";
}
  • 실무에서 가장 많이 사용한다.
  • @RequestBody를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다.
  • 이렇게 메시지 바디를 직접 조회하는 기능은 요청 파라미터를 조회하는 @RequestParam , @ModelAttribute 와는 전혀 관계가 없다.
  • @ResponseBody 를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달할 수 있다. 물론 이 경우에도 view를 사용하지 않는다.

출처

인프런 강의 - 김영한
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

profile
안녕하세요

0개의 댓글