[spring] HTTP 메시지 컨버터

공수정·2022년 5월 22일
0

spring

목록 보기
25/32
post-thumbnail

RequestMappingHandlerAdapter

RequestMappingHandlerAdapter@RequestMapping은 를 처리하는 핸들러 어댑터이다.
@RequestMapping 기반의 컨트롤러는 다양한 파라미터를 사용할 수 있다.
예를 들면 `HttpServletRequest , Model, @RequestParam , @ModelAttribute, @RequestBody , HttpEntity 등이 있다.
이렇게 많은 파라미터를 처리하는 등 매우 유연한 모습을 보여줄 수 있는 이유는 ArgumentResolver를 호출해 컨트롤러(=핸들러)가 필요한 파마미터 값(객체)를 생성하기 때문이다.


ArgumentResolver

ArgumentResolver란 정확히 HandlerMethodArgumentResolver이고, 줄여서 ArgumentResolver라고한다.
파라미터를 각 타입으로 변환시켜주는 리졸버이다.
스프링에는 약30개 이상의ArgumentResolver가 존재함

동작방식

  1. RequestMapping핸들러 어댑터가 ArgumentResolversupportsParameter()를 호출해서 컨트롤러(=핸들러)가 원하는 파라미터를 지원하는지 확인
  2. 지원하면, resolveArgument()를 호출해 파라미터를 변환
  3. RequestMapping핸들러 어댑터가 변환된 파라미터를 넘겨주며 컨트롤러(=핸들러) 호출

ReturnValueHandler

ReturnValueHandler란 정확히HandlerMethodReturnValueHandler이다.
이것은 ArgumentResolver와 비슷한데, ArgumentResolver는 요청 값에 대한 변환을 처리했다면 ReturnValueHandler는 응답 값에 대한 처리를 한다.
응답 값을 String으로 리턴해도 뷰 이름으로 동작하게 해주고, @ResponseBody가 붙어있으면 그대로 반환하게 해주는 이유이다.
이것도 ArgumentResolver와 같이 spring에서 여러개의 ReturnValueHandler가 존재한다.

동작방식

ArgumentResolver의 동작 방식과 비슷하다.


HTTP 메시지 컨버터

위치

요청의 경우 ArgumentResolver를, 응답의 경우 ReturnValueHandler를 사용해서 각각의 값을 변환한다.
이렇게 변환을 할 때에 사용하는 것이 HTTP 메시지 컨버터이기때문에 HTTP 메시지 컨버터ArgumentResolverReturnValueHandler안에서 호출되어 사용된다.

출처
1. 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

profile
계속해서 공부하는 개발자입니다 :)

0개의 댓글