less than 1 minute read

Reqeust Mapping Handler

  • Resolver : 처리해주는 애가 있다.
  • 어노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있다.
  • HttpServletReqeust, Model, @RequestParam, @ModelAttribute 같은 어노테이션 등이 있을텐데 이와 같은 파라미터들을 유연하게 처리해줄 수 있는것이 바로 ArgumentResolver가 있다.
  • ReqeustMapping이 ArgumentResolver에게 알맞는 파라미터를 가져올 수 있는지 물어본다.
  • 스프링은 30개가 넘는 ArgumentResolver를 제공한다.

동작 방식

  • ArgumentREsolver의 supportsParameter()를 호출해서 해당 파라미터를 지원하는지 체크하고, 지원하면 resolveArgument()를 호출해서 실제 객체를 생성한다. 그리고 이렇게 생성된 객체가 컨트롤러 호출시 넘어가는 것이다.

ReturnValueHandler

  • ArgumentResolver랑 비슷한데, 응답 값을 변환하고 처리한다. 스프링은 10여개가 넘는 ReturnValueHandler를 지원한다.

확장

  • 아래 3가지 클래스는 모두 인터페이스로 제공한다.
  • HandlerMethodArgumentResolver
  • HandlerMethodReturnValueHandler
  • HttpMessageCOnverter

기능 확장은 WebMvcConfigurer 를 상속 받아서 스프링 빈으로 등록하면 된다.

@Bean
public WebMvcConfigurer webMvcCOnfigurer(){
    return new WebMvcConfigurer(){
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers){
            //...
        }
        @Override
        public void extendMessageConverters(List<HttpMessageConverter<?>> converters){
            //...
        }
    };
}

Categories:

Updated: