
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) {
//...
}
};
}