SpringBoot 에서 Resolver 알아보기

searchortype·2023년 5월 6일
1
post-thumbnail

오늘은 Resolver에 대해서 알아보겠습니다.

Resolver 리졸버
def. [동사] (문제 등을) 해결하다 (=settle)
어떤 문제를 해결하거나 값을 찾아내기 위해 사용되는 구성 요소나 알고리즘을 가리킵니다.

SpringMVC에서 resolver

요청 처리 과정에서 어떤 객체나 데이터를 찾아내거나 변환하는 역할을 수행하는 인터페이스입니다.

Resolver의 종류

  • ViewResolver
    ViewResolver는 컨트롤러에서 반환한 뷰 이름을 실제 뷰 객체로 변환하는 역할을 합니다. Spring Boot는 InternalResourceViewResolver를 제공하며, 이를 통해 JSP 파일과 같은 뷰를 생성할 수 있습니다. 또한, Thymeleaf나 FreeMarker와 같은 템플릿 엔진을 사용하기 위해 각각의 ViewResolver를 등록하여 사용할 수도 있습니다.
@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());
  }
}
  • ContentNegotiationConfigurer
    ContentNegotiationConfigurer는 HTTP 요청의 Accept 헤더에 따라 적절한 미디어 타입을 선택하는 데 사용됩니다. Spring Boot는 DefaultServletHttpRequestHandler를 사용하여 정적 리소스를 제공하며, ContentNegotiationConfigurer를 사용하여 JSON, XML 등 다양한 미디어 타입을 처리할 수 있습니다.
@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);
  }
}
  • LocaleResolver
    LocaleResolver는 언어 설정에 따라 애플리케이션의 로컬을 설정하는 데 사용됩니다. Spring Boot는 AcceptHeaderLocaleResolver를 제공하며, HTTP 요청의 Accept-Language 헤더에 따라 로컬을 설정합니다. 또한, CookieLocaleResolver나 SessionLocaleResolver와 같은 다른 LocaleResolver를 등록하여 사용할 수도 있습니다.
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

  @Bean
  public LocaleResolver localeResolver() {
    CookieLocaleResolver localeResolver = new CookieLocaleResolver();
    localeResolver.setCookieName("myLocaleCookie");
    localeResolver.setDefaultLocale(Locale.ENGLISH);
    return localeResolver;
  }
}
  • MultipartResolver
    MultipartResolver는 HTTP 요청에서 멀티파트 파일을 처리하는 데 사용됩니다. Spring Boot는 StandardServletMultipartResolver를 제공하며, 파일 업로드를 위해 사용됩니다.
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

  @Bean
  public MultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(100000);
    return multipartResolver;
  }
}

0개의 댓글