HTTP 메시지 컨버터

SHByun·2023년 1월 25일
0

강의 chap6-13


HTTP 메시지 컨버터

1. ResponseBody를 사용

  • HTTP Body에 문자 내용을 그대로 직접 반환한다.
  • viewResolver 대신에 HttpMessageConverter가 동작한다.
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter

2. HTTP 메시지 컨버터

  • HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.
  • HTTP 요청: @RequestBody , HttpEntity(RequestEntity)
  • HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity)
  • 이 경우 스프링 MVC는 HTTP 메시지 컨버터를 적용한다.
  • 인터페이스로 구현되어 있다.

3. 스프링 부트 기본 메시지 컨버터

  • 대상 클래스 타입과 미디어 타입 둘을 체크해서 무엇을 사용할지 결정해준다.

  • 쓰기 미디어 타입은 자동으로 나간다.

  • ByteArrayHttpMessageConverter : byte[] 데이터를 처리한다.
    -> 클래스 타입: byte[] , 미디어타입: /
    -> 요청 예) @RequestBody byte[] data
    -> 응답 예) @ResponseBody return byte[] 쓰기 미디어타입 application/octet-stream

  • StringHttpMessageConverter : String 문자로 데이터를 처리한다.
    -> 클래스 타입: String , 미디어타입: /
    -> 요청 예) @RequestBody String data
    -> 응답 예) @ResponseBody return "ok" 쓰기 미디어타입 text/plain

  • MappingJackson2HttpMessageConverter : application/json
    -> 클래스 타입: 객체 또는 HashMap , 미디어타입 application/json 관련
    -> 요청 예) @RequestBody HelloData data
    -> 응답 예) @ResponseBody return helloData 쓰기 미디어타입 application/json 관련

4. HTTP 요청 데이터 읽기

  • HTTP 요청이 오고, 컨트롤러에서 @RequestBody , HttpEntity 파라미터를 사용하면 메시지 컨버터가 동작한다.
  • 메시지 컨버터가 메시지를 읽을 수 있는지 확인하기 위해 canRead() 메서드를 호출해서 확인한다.
  • 대상 클래스 타입을 지원하는지 확인
    -> 예) @RequestBody 의 대상 클래스 ( byte[] , String , 객체 )
  • HTTP 요청의 Content-Type 미디어 타입을 지원하는지 확인
    -> 예) text/plain , application/json , /
  • canRead() 조건을 만족하면 read() 를 호출해서 객체 생성하고, 반환한다

5. HTTP 응답 데이터 생성

  • 컨트롤러에서 @ResponseBody, HttpEntity가 사용되면 그 값으로 반환이 되면 메시지 컨버터가 동작한다.
  • 메시지 컨버터가 메시지를 쓸 수 있는지 확인하기 위해 canWrite() 를 호출한다.
  • 대상 클래스 타입을 지원하는지 확인
    -> 예) return의 대상 클래스 ( byte[] , String , 객체 )
  • HTTP 요청의 Accept 미디어 타입을 지원하는지 확인
    -> 예) text/plain , application/json , /
  • canWrite() 조건을 만족하면 write() 를 호출해서 HTTP 응답 메시지 바디에 데이터를 생성한다.

출처

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

profile
안녕하세요

0개의 댓글