🦎 convert
1. [동사] (형태목적시스템 등을) 전환시키다[개조하다]
2. [동사] (형태목적시스템 등이) 전환[개조]되다
convert란 전환시키다, 개조하다란 뜻을 가지고 있는데, 전환, 변환의 느낌을 가지고 있다. 그렇다면 converter의 뜻 바로 변환기, 전환 장치 되시겠다 두둥!!
🌿 스프링 MVC는 HTTP 메시지 컨버터를 적용한다.
HTTP 요청: @RequestBody , HttpEntity(RequestEntity)
HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity)
스프링 부트는 기본적으로 메시지 컨버터를 등록 해놓는다.
1.ByteArrayHttpMessageConverter : byte[] 데이터를 처리한다.
클래스 타입: byte[] , 미디어타입: * / * ,
요청 예) @RequestBody byte[] data
응답 예) @ResponseBody return byte[] 쓰기 미디어타입: application/octet-stream
2.StringHttpMessageConverter : String 문자로 데이터를 처리한다.
클래스 타입: String , 미디어타입: * / *,
요청 예) @RequestBody String data
응답 예) @ResponseBody return "ok" 쓰기 미디어타입 : text/plain
3.MappingJackson2HttpMessageConverter : application/json를 처리한다.
클래스 타입: 객체 또는 HashMap , 미디어타입 application/json 관련
요청 예) @RequestBody HelloData data
응답 예) @ResponseBody return helloData 쓰기 미디어타입 : application/json 관련
⚔️ 순서대로 해당 메시지 컨버터를 이용해서 찾고 아니라면 다음 순서로 넘어간다.
👉 모든 비밀은 애노테이션 기반의 컨트롤러, 그러니까 @RequestMapping 을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdapter (요청 매핑 헨들러 어뎁터)에 있다.
🤔 ArgumentResolver?
응답시에는 다른 친구가 처리하는데, ReturnValueHandler. HandlerMethodReturnValueHandler 를 줄여서 ReturnValueHandler 라 부른다. 응답 값을 변환하고 처리하는 역할을 한다.
컨트롤러에서 String으로 뷰 이름을 반환해도, 동작하는 이유가 바로 ReturnValueHandler 덕분이다.
🎯 결국 HTTP 메시지 컨버터는 요청과 응답 모두에서 사용한다.
요청의 경우 @RequestBody 를 처리하는 ArgumentResolver 가 있고, HttpEntity 를 처리하는 ArgumentResolver 가 있다. 이 ArgumentResolver 들이 HTTP 메시지 컨버터를 사용해서 필요한 객체를 생성하는 것이다.
응답의 경우 @ResponseBody 와 HttpEntity 를 처리하는 ReturnValueHandler 가 있다. 그리고 여기에서 HTTP 메시지 컨버터를 호출해서 응답 결과를 만든다.
감사합니다. 이런 정보를 나눠주셔서 좋아요.