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
`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