오늘은 Resolver에 대해서 알아보겠습니다.
Resolver 리졸버
def. [동사] (문제 등을) 해결하다 (=settle)
어떤 문제를 해결하거나 값을 찾아내기 위해 사용되는 구성 요소나 알고리즘을 가리킵니다.
요청 처리 과정에서 어떤 객체나 데이터를 찾아내거나 변환하는 역할을 수행하는 인터페이스입니다.
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
HandlerMethodArgumentResolver
HandlerMethodArgumentResolver는 컨트롤러 메서드의 파라미터를 변환하는 데 사용됩니다. Spring Boot는 다양한 HandlerMethodArgumentResolver를 제공하며, 예를 들어, @RequestParam, @RequestBody, @PathVariable 등의 어노테이션을 사용하여 파라미터를 변환할 수 있습니다. 또한 사용자가 직접 커스텀 HandlerMethodArgumentResolver를 작성하여 등록할 수도 있습니다.
HandlerMethodArgumentResolver는 DispatcherServlet과 연관지어서 얘기해 볼 수 있을 것 같습니다. HandlerMethodArgumentResolver는 DispatcherServlet와 함께 동작하여 클라이언트의 요청을 처리합니다. DispatcherServlet은 클라이언트의 요청을 처리하기 위해 컨트롤러 메서드를 호출하고, HandlerMethodArgumentResolver는 컨트롤러 메서드의 파라미터를 HTTP 요청 파라미터로 변환합니다.
public class MyCustomArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(MyCustomObject.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
String paramValue = request.getParameter("myCustomParam");
return new MyCustomObject(paramValue);
}
}
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyCustomArgumentResolver());
}
}
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("json", MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML);
}
}
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setCookieName("myLocaleCookie");
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
}
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(100000);
return multipartResolver;
}
}