본문 바로가기
Spring Tutorial

[스프링MVC 기본 기능 7] HTTP 요청 메시지 - 단순 텍스트

by 미소5 2023. 8. 23.

3.  HTTP message body 데이터를 직접 담아서 요청

  • HTTP API(REST API)에서 주로 사용
  • 데이터 형식(JSON, XML, TEXT)은 주로 JSON 사용
  • POST, PUT, PATCH 에서 주로 사용

[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (*중요) (tistory.com)

 

[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (*중요)

HTTP 요청 데이터를 어떻게 조회하는지 알아보자! HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (3가지) 1. GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이, URL

joly156.tistory.com

 

요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우@RequestParam , @ModelAttribute를 사용할 수 없다.

 


[스프링 MVC 13] 서블릿: HTTP 요청 데이터 - API 메시지 바디 (tistory.com)

 

[스프링 MVC 13] 서블릿: HTTP 요청 데이터 - API 메시지 바디

HTTP message body에 데이터를 직접 담아서 담아서 요청 먼저 가장 단순한 텍스트 메시지를 담아 전송하고, 읽어보자 HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다 @WebServlet(name

joly156.tistory.com

먼저 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고, 읽어보자.  

@Slf4j
@Controller
public class RequestBodyStringController {

    @PostMapping("/request-body-string-v1")
    public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        log.info("messageBody={}", messageBody);
        response.getWriter().write("ok");
    }
    
    ...

Postman 테스트 결과


  • 스프링 MVC는 다음 파라미터를 지원한다.
    • InputStream(Reader): HTTP 요청 메시지 바디의 내용을 직접 조회
    • OutputStream(Writer): HTTP 응답 메시지 바디직접 결과 출력
@PostMapping("/request-body-string-v2")
public void requestBodyStringV2(InputStream inputStream, Writer respWriter) throws IOException {
    String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    log.info("messageBody={}", messageBody);
    respWriter.write("ok");
}

 


  • 스프링 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();  // 메시지 바디 정보를 직접 조회
    // HttpMessageConverter 사용 -> StringHttpMessageConverter 적용
    log.info("messageBody={}", messageBody);
    
    return new HttpEntity<>("ok");  //메시지 바디 정보를 직접 반환
}

  • HttpEntity 를 상속받은 다음 객체들도 같은 기능을 제공한다.
    • RequestEntity
      • HttpMethod, url 정보가 추가, 요청에서 사용
    •  ResponseEntity
      • HTTP 상태 코드 설정 가능, 응답에서 사용
@PostMapping("/request-body-string-v3")
public HttpEntity<String> requestBodyStringV3(RequestEntity<String> httpEntity) {

    String messageBody = httpEntity.getBody();
    log.info("messageBody={}", messageBody);

    return new ResponseEntity<String>("ok", HttpStatus.CREATED); //(메시지, HTTP 상태 코드)
}

스프링MVC 내부에서 HTTP 메시지 바디를 읽어서 문자나 객체로 변환해서 전달해주는데, 이때 HTTP 메시지 컨버터( HttpMessageConverter )라는 기능을 사용한다.

 


  • @RequestBody
    • @RequestBody를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다.
    • 참고로 헤더 정보가 필요하다면 HttpEntity 를 사용하거나 @RequestHeader 를 사용하면 된다.
    • 이렇게 메시지 바디를 직접 조회하는 기능은 요청 파라미터를 조회하는 @RequestParam , @ModelAttribute 와는 전혀 관계가 없다.
    •  요청 파라미터 vs HTTP 메시지 바디
      • 요청 파라미터를 조회하는 기능: @RequestParam , @ModelAttribute
      • HTTP 메시지 바디를 직접 조회하는 기능: @RequestBody

 

  • @ResponseBody
    • @ResponseBody를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달(반환)할 수 있다.
    • 물론 이 경우에도 view를 사용하지 않는다.
@ResponseBody   //메시지 바디 정보 직접 반환(view 조회X)
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody) {

    log.info("messageBody={}", messageBody);
    return "ok";
}

 

 



[스프링MVC 36] 기본 기능: HTTP 요청 파라미터 (쿼리 파라미터, HTML Form) (tistory.com)

 

[스프링MVC 36] 기본 기능: HTTP 요청 파라미터 (쿼리 파라미터, HTML Form)

[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (tistory.com) [스프링 MVC 10] 서블릿: HTTP 요청 데이터 HTTP 요청 데이터를 어떻게 조회하는지 알아보자! HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터

joly156.tistory.com

 

728x90
반응형