-
Spring MVC - HTTP 메시지 컨버터Spring/Spring MVC 2022. 1. 30. 14:05728x90반응형
HTTP 메시지 컨버터
HTTP 메시지 컨버터는 메시지 바디의 데이터 타입에 따라 데이터를 조회하거나 반환할 수 있다. 인터페이스로 구현되어 있으며 Byte, String, JSON 등 여러 타입의 데이터들을 HTTP 메시지 컨버터를 통해 요청 메시지 바디에 있는 데이터들을 조회하여 로직을 처리한 후 클라이언트가 필요한 데이터 타입으로 HTTP 메시지 컨버터를 통해 변환 후 변환된 타입으로 컨트롤러에 전송한다.
- HTTP 요청 메시지 읽기
요청 메시지가 오면 메시지 컨버터가 메시지를 읽을 수 있는지 확인하기 위해 canRead() 호출
- canRead : 대상 클래스 타입, content-type을 확인하여 해당 메시지 컨버터 실행
canRead() 조건을 만족하면 read()를 호출하여 객체 생성 및 반환이 된다. - HTTP 응답 메시지 생성
메시지 컨버터가 메시지를 쓸 수 있는지 확인하기 위해 canWrite() 호출
- canWrite : 대상 클래스 타입, HTTP 요청의 Accept content-type 확인하여 해당 메시지 컨버터 실행
canWrite() 조건을 만족하면 write()를 호출하여 HTTP 응답 메시지 바디에 데이터 반환
스프링 부트 기본 메시지 컨버터
데이터 타입을 변환해주는 메시지 컨버터들은 우선 순위가 지정되어있다. 다음은 우선순위 순서로 나열한 메시지 컨버터이다. 스프링 부트는 대상 클래스 타입과 미디어 타입 등을 체크해서 사용 여부를 결정하는데 만약 처음 메시지 컨버터의 조건을 만족하지 않으면 다음 메시지 컨버터로 우선순위가 넘어간다.
- ByteArrayHttpHttpMessageConverter
- StringHttpMessageConverter
- MappingJackson2HttpMessageConverter
- ....
ByteArrayHttpHttpMessageConverter
- byte[] 데이터를 처리한다.
- 클래스 타입: byte[], content-type: */*
- 요청 예) @RequestBody byte[] data
- 응답 예) @ResponseBody return byte[], Accept: application/octet-stream
StringHttpMessageConverter
- String 데이터를 처리한다
- 클래스 타입: String, content-type: */*
- 요청 예) @RequestBody String data
- 응답 예) @ResponseBody return "ok", Accept: text/plain
예시
/** * content-type: application/json */ @RequestMapping void hello(@RequetsBody String data) {}
메시지 컨버터 동작 순서
- 우선순위가 가장 높은 ByteArrayHttpHttpMessageConverter 메시지 컨버터가 조건 확인
- ByteArrayHttpHttpMessageConverter는 byte 데이터를 처리하므로 다음 우선 순위 메시지 컨버터로 넘어감
- StringHttpMessageConverter가 조건 확인
- 클래스 타입, content-type 모두 일치하므로 StringHttpMessageConverter을 통해 메시지 컨버터 실행
MappingJackson2HttpMessageConverter
- JSON 데이터를 처리한다
- 클래스 타입: 객체 또는 HashMap, content-type: application/json 관련
- 요청 예) @RequestBody UserData data
- 응답 예) @ResponseBody return userData, write content-type: application/json
예시
/** * content-type: application/json */ @RequestMapping void hello(@RequetsBody HelloData data) {}
메시지 컨버터 동작 순서
- ByteArrayHttpHttpMessageConverter 조건 확인, 클래스 타입이 안 맞음, 다음 메시지 컨버터
- StringHttpMessageConverter 조건 확인, 클래스 타입이 안맞음, 다음 메시지 컨버터
- MappingJackson2HttpMessageConverter 조건 확인, 클래스 타입과 content-type 모두 일치
- MappingJackson2HttpMessageConverter로 메시지 컨버터 실행
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 타임리프(Thymeleaf) 기본 기능 1(텍스트, 변수 표현식, 지역 변수) (0) 2022.02.02 Spring MVC - 타임리프(Thymeleaf)에 대한 간단한 정리 (0) 2022.01.31 Spring MVC - 응답 메시지를 만드는 방법 (정적 리소스, 뷰 템플릿, HTTP API 메시지 바디에 직접 입력) (0) 2022.01.29 Spring MVC - JSON으로 보낸 HTTP 요청 메시지 조회 (0) 2022.01.29 Spring MVC - 단순 텍스트으로 보낸 HTTP 요청 메시지 조회와 HTTP 응답 메시지 처리(@RequestBody, @ResponseBody) (0) 2022.01.29 - HTTP 요청 메시지 읽기