728x90
반응형
Message Converter
Message Conveter 에 대해서 알아본다.
쉽게 이해할수 있도록 자료를 참고하여 정리를 했습니다.
- 뷰를 사용하지 않고 HTTP API 처럼 JSON 데이터를 바디에 직접 읽거나 쓰는경우 HTTP 메시지 컨버터를 사용하면 편하다.
- HTTP response 또는 request 에서 사용된다
Message Converter 가 적용되는 경우
- HTTP Request:
- @RequestBody, HttpEntity(RequestEntity) - HTTP Response:
- @ResponseBody, HttpEntity(ResposnseEntity)
Message Converter 의 주요 구현체 들
- 구현체들을 살펴보자 물론 이것 말고도 더 많이 있다.
ByteArrayHttpMessageConverter
- byte[] 데이터를 처리한다
- Class Type: byte
- Media Type: */*, application/octet-stream
- 요청) @RequestBody byte[] data
- 응답) @ResponseBody return byte[]
StringHttpMessageConverter
- String 문자로 데이터를 처리한다.
- Class Type: String
- Media Type: */*, text/plain
- 요청) @RequestBody String Data
- 응답) @Response return "ok"
MappingJackson2HttpMessageConverter
- Object, ,HashMap, Json 타입을 데이터로 처리
- Class Type: Object, HashMap
- Media Type: application/json 관련
- 요청) @RequestBody Member data
- 응답) @ResponseBody return data
HttpMessageConverter 의 중요 기능들
- canRead(), canWriter():
- 메세지 컨버터가 해당클래스, 미디어타입을 지원하는지 체크 - read(), write():
- 메시지 컨버터를 통해서 메시지를 읽고 쓰는기능
HTTP 요청 데이터를 Message Converter 가 처리하는 과정
- HTTP Request 가 온다.
- @RequestBody, HeepEntity 파라미터를 사용함. - canRead() 호출
- 메시지를 읽을수 있는지 판단.
- 대상클래스의 타입을 지원하는지 확인
- Content-Type 확인 - canRead() 조건 만족시 read()를 호출하여 객체를 생성하고 반환
HTTP 응답 데이터를 Message Conveter 가 처리하는 과정
- 컨트롤러에서 @ResposeBody HttpEntity로 값이 반환된다
- canWrite() 호출
- 메시지를 쓸수 있는지 확인
- 대상클래스의 타입확인
- Http 요청의 Accept 미디어 타입확인 - canWrite() 만족할 경우 write() 호출
- Http 응답 메시지 바디에 데이터를 생성한다.
HTTP MessageConverter 위치
- Http MessageConveter 는 어디서 동작할까?
- 아래 그림 처럼 ArgumentResolver, ReturnValueHandler 가 HTTP Message Converter 를 사용하여 필요한 객체를 생성한다.
ArgumentResolver
- ArgumentResolver란 뭘까?
- 애노테이션 기반 컨들롤러는 매우 다양한 파라미터를 사용할수 있다.
이걸 가능하게 해주는 것이 ArgumentResolver 이다. - 여기서 HTTP MessageConveter 를 사용해 필요한 객체들을 생성해낸다.
ArgumentResolver 가 처리하는 파라미터들
이외에도 여러개가 있다.
- HttpServletRequest
- Model
- @RequestParam
- @ModelAttribute
- @RequestBody
- HttpEntity
ArgumentResolver 동작방식
- supportsParameter() 호출
- 해당 파라미터를 지원하는지 홧인 - 지원할 경우 resolveArgument() 호출
- 실제 객체를 생성 후 컨트롤러로 넘어간다.
ReturnValueHandler
- ArgumentResolver 와 비슷하지만 응답 값만 변환하고 처리한다.
- 여기서 HTTP MessageConveter 를 사용해 필요한 객체들을 생성해낸다.
ReturnValueHandler 가 처리하는 파라미터들
이외에도 여러개가 있다.
- ModelAndView
- @ResponseBody
- HttpEntity
참고
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/lecture/71225?tab=curriculum
728x90
반응형
'Spring > spring mvc 1 스터디' 카테고리의 다른 글
[Spring] 웹페이지 만들어 보기 (0) | 2021.12.02 |
---|---|
[Spring] @ModelAttribute 사용하기 (0) | 2021.11.27 |
[Spring] HTTP 응답 (0) | 2021.11.21 |
[Spring] HTTP 요청메세지 TEXT, JSON (0) | 2021.11.16 |
[Spring] HTTP 요청파라미터 (0) | 2021.11.13 |
댓글