요청 매핑 핸들러 어댑터
Last updated
Last updated
HTTP 메시지 컨버터는 4번에서 handler를 호출하는 RequestMappingHandlerAdapter(요청 매핑 핸들러 어댑터)와 관련있다.
컨트롤러 메서드에는 파라미터, 애너테이션 등등 많은 정보가 있다. 이 정보를 ArgumentResolver가 처리해준다.
RequestMappingHandlerAdapter는 이 ArgumentResolver를 호출해 컨트롤러(핸들러)에게 필요한 파라미터 값을 생성한다.
파라미터 값이 모두 준비되면 컨트롤러를 호출하면서 값을 넘겨준다.
ArguemntResolver는 정확히 말하면 HandlerMethodArgumentResolver라고 한다.
supportsParameter()
파라미터 정보를 보고 이 값을 지원하는지 확인한다.
resolverArgument()
지원한다면 객체를 만들어서 반환한다.
리턴 타입을 보면 Object인 것을 알 수 있다.
원한다면 이 인터페이스를 직접 확장해서 커스텀할 수 있다.
Reference
HandlerMethodReturnValueHandler를 줄여서 부르는 명칭
ReturnValueHandler 덕분에 컨트롤러에서 String, ModelAndView, @ResponseBody 등 다양한 값을 반환할 수 있다.
Reference
메시지 컨버터는 ArgumentResolver와 ReturnValueHandler에 있다.
@RequestBody, @ResponseBody
RequestResponseBodyMethodProcessor라는 ArgumentResolver가 처리한다.
HttpEntity
HttpEntityMethodProcessor라는 ArgumentResolver가 처리한다.
@RequestBody, HttpEntity 등을 처리하는 ArgumentResolver가 있다.
이 ArgumentResolver가 HTTP 메시지 컨버터를 이용해 필요한 객체를 생성한다.
@ResponseBody, HttpEntity 등을 처리하는 ReturnValueHandler가 있다.
이 ArgumentResolver가 HTTP 메시지 컨버터를 호출해 응답 결과를 만든다.
ArgumentResolver에서 메시지 컨버터를 호출하는 걸 볼 수 있다.
HandlerMethodArgumentResolver
HandlerMethodReturnValueHandler
HttpMessageConverter
스프링은 이 세 가지를 모두 인터페이스로 제공하기 때문에 필요하면 언제든 확장할 수 있다. 스프링이 대부분을 지원하기 때문에 확장할 일은 거의 없긴 하다.
만약 필요하다면 WebMvcConfigurer를 상속받아서 스프링 빈으로 등록하면 된다.