org.springframework.web.servlet.config.annotation

## Class WebMvcConfigurationSupport

- java.lang.Object
- - org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport

- All Implemented Interfaces:
    Aware, ApplicationContextAware, ServletContextAware
  Direct Known Subclasses:
    DelegatingWebMvcConfiguration

      public class WebMvcConfigurationSupport
      extends Object
      implements ApplicationContextAware, ServletContextAware

  This is the main class providing the configuration behind the MVC Java config. It is typically imported by adding `@EnableWebMvc` to an application `@Configuration` class. An alternative more advanced option is to extend directly from this class and override methods as necessary remembering to add `@Configuration` to the subclass and `@Bean` to overridden `@Bean` methods. For more details see the Javadoc of `@EnableWebMvc`.

  This class registers the following `HandlerMapping`s:

  - `RequestMappingHandlerMapping` ordered at 0 for mapping requests to annotated controller methods.
  - `HandlerMapping` ordered at 1 to map URL paths directly to view names.
  - `BeanNameUrlHandlerMapping` ordered at 2 to map URL paths to controller bean names.
  - `HandlerMapping` ordered at `Integer.MAX_VALUE-1` to serve static resource requests.
  - `HandlerMapping` ordered at `Integer.MAX_VALUE` to forward requests to the default servlet.

  Registers these `HandlerAdapter`s:

  - `RequestMappingHandlerAdapter` for processing requests with annotated controller methods.
  - `HttpRequestHandlerAdapter` for processing requests with `HttpRequestHandler`s.
  - `SimpleControllerHandlerAdapter` for processing requests with interface-based `Controller`s.

  Registers a `HandlerExceptionResolverComposite` with this chain of exception resolvers:

  - `ExceptionHandlerExceptionResolver` for handling exceptions through @`ExceptionHandler` methods.
  - `ResponseStatusExceptionResolver` for exceptions annotated with @`ResponseStatus`.
  - `DefaultHandlerExceptionResolver` for resolving known Spring exception types

  Both the `RequestMappingHandlerAdapter` and the `ExceptionHandlerExceptionResolver` are configured with default instances of the following by default:

  - A `ContentNegotiationManager`
  - A `DefaultFormattingConversionService`
  - A `LocalValidatorFactoryBean` if a JSR-303 implementation is available on the classpath
  - A range of `HttpMessageConverter`s depending on the 3rd party libraries available on the classpath.
  Since:
    3.1
  Author:
    Rossen Stoyanchev
  See Also:
    `EnableWebMvc`, `WebMvcConfigurer`, `WebMvcConfigurerAdapter`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `WebMvcConfigurationSupport()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)` Add custom `HandlerMethodArgumentResolver`s to use in addition to the ones registered by default.
    `protected void` | `addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)` A method available to subclasses for adding default `HandlerExceptionResolver`s.
    `protected void` | `addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters)` Adds a set of default HttpMessageConverter instances to the given list.
    `protected void` | `addFormatters(FormatterRegistry registry)` Override this method to add custom `Converter`s and `Formatter`s.
    `protected void` | `addInterceptors(InterceptorRegistry registry)` Override this method to add Spring MVC interceptors for pre- and post-processing of controller invocation.
    `protected void` | `addResourceHandlers(ResourceHandlerRegistry registry)` Override this method to add resource handlers for serving static resources.
    `protected void` | `addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)` Add custom `HandlerMethodReturnValueHandler`s in addition to the ones registered by default.
    `protected void` | `addViewControllers(ViewControllerRegistry registry)` Override this method to add view controllers.
    `BeanNameUrlHandlerMapping` | `beanNameHandlerMapping()` Return a `BeanNameUrlHandlerMapping` ordered at 2 to map URL paths to controller bean names.
    `void` | `configureAsyncSupport(AsyncSupportConfigurer configurer)` Override this method to configure asynchronous request processing options.
    `protected void` | `configureContentNegotiation(ContentNegotiationConfigurer configurer)` Override this method to configure content negotiation.
    `protected void` | `configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)` Override this method to configure "default" Servlet handling.
    `protected void` | `configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)` Override this method to configure the list of `HandlerExceptionResolver`s to use.
    `protected void` | `configureMessageConverters(List<HttpMessageConverter<?>> converters)` Override this method to add custom `HttpMessageConverter`s to use with the `RequestMappingHandlerAdapter` and the `ExceptionHandlerExceptionResolver`.
    `HandlerMapping` | `defaultServletHandlerMapping()` Return a handler mapping ordered at Integer.MAX_VALUE with a mapped default servlet handler.
    `protected ConfigurableWebBindingInitializer` | `getConfigurableWebBindingInitializer()` Return the `ConfigurableWebBindingInitializer` to use for initializing all `WebDataBinder` instances.
    `protected Map<String,MediaType>` | `getDefaultMediaTypes()`
    `protected Object[]` | `getInterceptors()` Provide access to the shared handler interceptors used to configure `HandlerMapping` instances with.
    `protected MessageCodesResolver` | `getMessageCodesResolver()` Override this method to provide a custom `MessageCodesResolver`.
    `protected List<HttpMessageConverter<?>>` | `getMessageConverters()` Provides access to the shared `HttpMessageConverter`s used by the `RequestMappingHandlerAdapter` and the `ExceptionHandlerExceptionResolver`.
    `protected Validator` | `getValidator()` Override this method to provide a custom `Validator`.
    `HandlerExceptionResolver` | `handlerExceptionResolver()` Returns a `HandlerExceptionResolverComposite` containing a list of exception resolvers obtained either through `configureHandlerExceptionResolvers(List)` or through `addDefaultHandlerExceptionResolvers(List)`.
    `HttpRequestHandlerAdapter` | `httpRequestHandlerAdapter()` Returns a `HttpRequestHandlerAdapter` for processing requests with `HttpRequestHandler`s.
    `ContentNegotiationManager` | `mvcContentNegotiationManager()` Return a `ContentNegotiationManager` instance to use to determine requested media types in a given request.
    `FormattingConversionService` | `mvcConversionService()` Return a `FormattingConversionService` for use with annotated controller methods and the `spring:eval` JSP tag.
    `Validator` | `mvcValidator()` Return a global `Validator` instance for example for validating `@ModelAttribute` and `@RequestBody` method arguments.
    `RequestMappingHandlerAdapter` | `requestMappingHandlerAdapter()` Returns a `RequestMappingHandlerAdapter` for processing requests through annotated controller methods.
    `RequestMappingHandlerMapping` | `requestMappingHandlerMapping()` Return a `RequestMappingHandlerMapping` ordered at 0 for mapping requests to annotated controllers.
    `HandlerMapping` | `resourceHandlerMapping()` Return a handler mapping ordered at Integer.MAX_VALUE-1 with mapped resource handlers.
    `void` | `setApplicationContext(ApplicationContext applicationContext)` Set the Spring `ApplicationContext`, e.g.
    `void` | `setServletContext(ServletContext servletContext)` Set the `ServletContext`, e.g.
    `SimpleControllerHandlerAdapter` | `simpleControllerHandlerAdapter()` Returns a `SimpleControllerHandlerAdapter` for processing requests with interface-based controllers.
    `HandlerMapping` | `viewControllerHandlerMapping()` Return a handler mapping ordered at 1 to map URL paths directly to view names.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### WebMvcConfigurationSupport

          public WebMvcConfigurationSupport()

  - ### Method Detail

    - #### setServletContext

          public void setServletContext(ServletContext servletContext)

      Set the `ServletContext`, e.g. for resource handling, looking up file extensions, etc.
      Specified by:
        `setServletContext` in interface `ServletContextAware`
      Parameters:
        `servletContext` - ServletContext object to be used by this object
      See Also:
        `InitializingBean.afterPropertiesSet()`, `ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)`

    - #### setApplicationContext

          public void setApplicationContext(ApplicationContext applicationContext)
                                     throws BeansException

      Set the Spring `ApplicationContext`, e.g. for resource loading.
      Specified by:
        `setApplicationContext` in interface `ApplicationContextAware`
      Parameters:
        `applicationContext` - the ApplicationContext object to be used by this object
      Throws:
        `ApplicationContextException` - in case of context initialization errors
        `BeansException` - if thrown by application context methods
      See Also:
        `BeanInitializationException`

    - #### requestMappingHandlerMapping

          @Bean
          public RequestMappingHandlerMapping requestMappingHandlerMapping()

      Return a `RequestMappingHandlerMapping` ordered at 0 for mapping requests to annotated controllers.

    - #### getInterceptors

          protected final Object[] getInterceptors()

      Provide access to the shared handler interceptors used to configure `HandlerMapping` instances with. This method cannot be overridden, use `addInterceptors(InterceptorRegistry)` instead.

    - #### addInterceptors

          protected void addInterceptors(InterceptorRegistry registry)

      Override this method to add Spring MVC interceptors for pre- and post-processing of controller invocation.
      See Also:
        `InterceptorRegistry`

    - #### mvcContentNegotiationManager

          @Bean
          public ContentNegotiationManager mvcContentNegotiationManager()

      Return a `ContentNegotiationManager` instance to use to determine requested media types in a given request.

    - #### getDefaultMediaTypes

          protected Map<String,MediaType> getDefaultMediaTypes()

    - #### configureContentNegotiation

          protected void configureContentNegotiation(ContentNegotiationConfigurer configurer)

      Override this method to configure content negotiation.
      See Also:
        `DefaultServletHandlerConfigurer`

    - #### viewControllerHandlerMapping

          @Bean
          public HandlerMapping viewControllerHandlerMapping()

      Return a handler mapping ordered at 1 to map URL paths directly to view names. To configure view controllers, override `addViewControllers(org.springframework.web.servlet.config.annotation.ViewControllerRegistry)`.

    - #### addViewControllers

          protected void addViewControllers(ViewControllerRegistry registry)

      Override this method to add view controllers.
      See Also:
        `ViewControllerRegistry`

    - #### beanNameHandlerMapping

          @Bean
          public BeanNameUrlHandlerMapping beanNameHandlerMapping()

      Return a `BeanNameUrlHandlerMapping` ordered at 2 to map URL paths to controller bean names.

    - #### resourceHandlerMapping

          @Bean
          public HandlerMapping resourceHandlerMapping()

      Return a handler mapping ordered at Integer.MAX_VALUE-1 with mapped resource handlers. To configure resource handling, override `addResourceHandlers(org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry)`.

    - #### addResourceHandlers

          protected void addResourceHandlers(ResourceHandlerRegistry registry)

      Override this method to add resource handlers for serving static resources.
      See Also:
        `ResourceHandlerRegistry`

    - #### defaultServletHandlerMapping

          @Bean
          public HandlerMapping defaultServletHandlerMapping()

      Return a handler mapping ordered at Integer.MAX_VALUE with a mapped default servlet handler. To configure "default" Servlet handling, override `configureDefaultServletHandling(org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer)`.

    - #### configureDefaultServletHandling

          protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)

      Override this method to configure "default" Servlet handling.
      See Also:
        `DefaultServletHandlerConfigurer`

    - #### requestMappingHandlerAdapter

          @Bean
          public RequestMappingHandlerAdapter requestMappingHandlerAdapter()

      Returns a `RequestMappingHandlerAdapter` for processing requests through annotated controller methods. Consider overriding one of these other more fine-grained methods:
      - `addArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)` for adding custom argument resolvers.
      - `addReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)` for adding custom return value handlers.
      - `configureMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>)` for adding custom message converters.

    - #### getConfigurableWebBindingInitializer

          protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer()

      Return the `ConfigurableWebBindingInitializer` to use for initializing all `WebDataBinder` instances.

    - #### mvcConversionService

          @Bean
          public FormattingConversionService mvcConversionService()

      Return a `FormattingConversionService` for use with annotated controller methods and the `spring:eval` JSP tag. Also see `addFormatters(org.springframework.format.FormatterRegistry)` as an alternative to overriding this method.

    - #### mvcValidator

          @Bean
          public Validator mvcValidator()

      Return a global `Validator` instance for example for validating `@ModelAttribute` and `@RequestBody` method arguments. Delegates to `getValidator()` first and if that returns `null` checks the classpath for the presence of a JSR-303 implementations before creating a `LocalValidatorFactoryBean`.If a JSR-303 implementation is not available, a no-op `Validator` is returned.

    - #### getValidator

          protected Validator getValidator()

      Override this method to provide a custom `Validator`.

    - #### getMessageCodesResolver

          protected MessageCodesResolver getMessageCodesResolver()

      Override this method to provide a custom `MessageCodesResolver`.

    - #### addArgumentResolvers

          protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)

      Add custom `HandlerMethodArgumentResolver`s to use in addition to the ones registered by default.

      Custom argument resolvers are invoked before built-in resolvers except for those that rely on the presence of annotations (e.g. `@RequestParameter`, `@PathVariable`, etc.). The latter can be customized by configuring the `RequestMappingHandlerAdapter` directly.

      Parameters:
        `argumentResolvers` - the list of custom converters; initially an empty list.

    - #### addReturnValueHandlers

          protected void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)

      Add custom `HandlerMethodReturnValueHandler`s in addition to the ones registered by default.

      Custom return value handlers are invoked before built-in ones except for those that rely on the presence of annotations (e.g. `@ResponseBody`, `@ModelAttribute`, etc.). The latter can be customized by configuring the `RequestMappingHandlerAdapter` directly.

      Parameters:
        `returnValueHandlers` - the list of custom handlers; initially an empty list.

    - #### getMessageConverters

          protected final List<HttpMessageConverter<?>> getMessageConverters()

      Provides access to the shared `HttpMessageConverter`s used by the `RequestMappingHandlerAdapter` and the `ExceptionHandlerExceptionResolver`. This method cannot be overridden. Use `configureMessageConverters(List)` instead. Also see `addDefaultHttpMessageConverters(List)` that can be used to add default message converters.

    - #### configureMessageConverters

          protected void configureMessageConverters(List<HttpMessageConverter<?>> converters)

      Override this method to add custom `HttpMessageConverter`s to use with the `RequestMappingHandlerAdapter` and the `ExceptionHandlerExceptionResolver`. Adding converters to the list turns off the default converters that would otherwise be registered by default. Also see `addDefaultHttpMessageConverters(List)` that can be used to add default message converters.
      Parameters:
        `converters` - a list to add message converters to; initially an empty list.

    - #### addDefaultHttpMessageConverters

          protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters)

      Adds a set of default HttpMessageConverter instances to the given list. Subclasses can call this method from `configureMessageConverters(List)`.
      Parameters:
        `messageConverters` - the list to add the default message converters to

    - #### addFormatters

          protected void addFormatters(FormatterRegistry registry)

      Override this method to add custom `Converter`s and `Formatter`s.

    - #### configureAsyncSupport

          public void configureAsyncSupport(AsyncSupportConfigurer configurer)

      Override this method to configure asynchronous request processing options.
      See Also:
        `AsyncSupportConfigurer`

    - #### httpRequestHandlerAdapter

          @Bean
          public HttpRequestHandlerAdapter httpRequestHandlerAdapter()

      Returns a `HttpRequestHandlerAdapter` for processing requests with `HttpRequestHandler`s.

    - #### simpleControllerHandlerAdapter

          @Bean
          public SimpleControllerHandlerAdapter simpleControllerHandlerAdapter()

      Returns a `SimpleControllerHandlerAdapter` for processing requests with interface-based controllers.

    - #### handlerExceptionResolver

          @Bean
          public HandlerExceptionResolver handlerExceptionResolver()

      Returns a `HandlerExceptionResolverComposite` containing a list of exception resolvers obtained either through `configureHandlerExceptionResolvers(List)` or through `addDefaultHandlerExceptionResolvers(List)`.

      Note: This method cannot be made final due to CGLib constraints. Rather than overriding it, consider overriding `configureHandlerExceptionResolvers(List)`, which allows providing a list of resolvers.

    - #### configureHandlerExceptionResolvers

          protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)

      Override this method to configure the list of `HandlerExceptionResolver`s to use. Adding resolvers to the list turns off the default resolvers that would otherwise be registered by default. Also see `addDefaultHandlerExceptionResolvers(List)` that can be used to add the default exception resolvers.
      Parameters:
        `exceptionResolvers` - a list to add exception resolvers to; initially an empty list.

    - #### addDefaultHandlerExceptionResolvers

          protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)

      A method available to subclasses for adding default `HandlerExceptionResolver`s.

      Adds the following exception resolvers:

      - `ExceptionHandlerExceptionResolver` for handling exceptions through @`ExceptionHandler` methods.
      - `ResponseStatusExceptionResolver` for exceptions annotated with @`ResponseStatus`.
      - `DefaultHandlerExceptionResolver` for resolving known Spring exception types