스프링 MVC Reqeust Mapping Handler
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){
//...
}
};
}