HttpServletRequest
, Model
, @RequestParam
, @ModelAttribute
, @RequestBody
, HttpEntity
등등..ArgumentResolver
덕분이다.RequestMappingHandlerAdapter
가 ArgumentResolver
를 호출해서 컨트롤러(핸들러)가 필요로 하는 다양한 파라미터 값(객체)를 생성하여 컨트롤러를 호출하면서 넘겨 준다.ArgumentResolver
를 기본으로 제공한다.💡가능한 파라미터 목록은 아래 공식 메뉴얼 확인
✔️ HandlerMehtodArgumentResolver(줄여서 ArgumentResolver) 인터페이스
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory)
throws Exception;
}
✔️ ArgumentResolver 동작 방식
supportParameter()
를 호출해서 해당 파라미터를 지원하는지 체크resolveArgument()
를 호출해서 실제 객체를 생성💡 HandlerMehtodArgumentResolver 인터페이스를 확장해서 커스텀 ArgumentResolver를 만들 수도 있다.
HandlerMethodReturnValueHandler
를 줄여서 ReturnValueHandler
라고 부름💡가능한 응답 값 목록은 아래 공식 메뉴얼에서 확인
✔️ 확장
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) {
//...
}
};
}