강의 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