Class WebMvcConfigurationSupport

java.lang.Object
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware, org.springframework.web.context.ServletContextAware
Direct Known Subclasses:
DelegatingWebMvcConfiguration

public class WebMvcConfigurationSupport extends Object implements org.springframework.context.ApplicationContextAware, org.springframework.web.context.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 HandlerMappings:

Registers these HandlerAdapters:

Registers a HandlerExceptionResolverComposite with this chain of exception resolvers:

Registers an AntPathMatcher and a UrlPathHelper to be used by:

Note that those beans can be configured with a PathMatchConfigurer.

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

  • a ContentNegotiationManager
  • a DefaultFormattingConversionService
  • an OptionalValidatorFactoryBean if a JSR-303 implementation is available on the classpath
  • a range of HttpMessageConverters depending on the third-party libraries available on the classpath.
Since:
3.1
Author:
Rossen Stoyanchev, Brian Clozel, Sebastien Deleuze, Hyoungjune Kim
See Also:
  • Constructor Details

    • WebMvcConfigurationSupport

      public WebMvcConfigurationSupport()
  • Method Details

    • setApplicationContext

      public void setApplicationContext(@Nullable org.springframework.context.ApplicationContext applicationContext)
      Set the Spring ApplicationContext, for example, for resource loading.
      Specified by:
      setApplicationContext in interface org.springframework.context.ApplicationContextAware
    • getApplicationContext

      public final @Nullable org.springframework.context.ApplicationContext getApplicationContext()
      Return the associated Spring ApplicationContext.
      Since:
      4.2
    • setServletContext

      public void setServletContext(@Nullable jakarta.servlet.ServletContext servletContext)
      Set the ServletContext, for example, for resource handling, looking up file extensions, etc.
      Specified by:
      setServletContext in interface org.springframework.web.context.ServletContextAware
    • getServletContext

      public final @Nullable jakarta.servlet.ServletContext getServletContext()
      Return the associated ServletContext.
      Since:
      4.2
    • requestMappingHandlerMapping

      @Bean public RequestMappingHandlerMapping requestMappingHandlerMapping(@Qualifier("mvcContentNegotiationManager") org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager, @Qualifier("mvcApiVersionStrategy") @Nullable org.springframework.web.accept.ApiVersionStrategy apiVersionStrategy, @Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider)
      Return a RequestMappingHandlerMapping ordered at 0 for mapping requests to annotated controllers.
    • createRequestMappingHandlerMapping

      protected RequestMappingHandlerMapping createRequestMappingHandlerMapping()
      Protected method for plugging in a custom subclass of RequestMappingHandlerMapping.
      Since:
      4.0
    • getInterceptors

      protected final Object[] getInterceptors(org.springframework.format.support.FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider)
      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:
    • getPathMatchConfigurer

      protected PathMatchConfigurer getPathMatchConfigurer()
      Callback for building the PathMatchConfigurer. Delegates to configurePathMatch(PathMatchConfigurer).
      Since:
      4.1
    • configurePathMatch

      protected void configurePathMatch(PathMatchConfigurer configurer)
      Override this method to configure path matching options.
      Since:
      4.0.3
      See Also:
    • mvcPatternParser

      @Bean public org.springframework.web.util.pattern.PathPatternParser mvcPatternParser()
      Return a global PathPatternParser instance to use for parsing patterns to match to the RequestPath. The returned instance can be configured using configurePathMatch(PathMatchConfigurer).
      Since:
      5.3.4
    • mvcUrlPathHelper

      @Deprecated(since="7.0", forRemoval=true) @Bean public org.springframework.web.util.UrlPathHelper mvcUrlPathHelper()
      Deprecated, for removal: This API element is subject to removal in a future version.
      use of PathMatcher and UrlPathHelper is deprecated for use at runtime in web modules in favor of parsed patterns with PathPatternParser.
      Return a global UrlPathHelper instance which is used to resolve the request mapping path for an application. The instance can be configured via configurePathMatch(PathMatchConfigurer).

      Note: This is only used when parsed patterns are not enabled.

      Since:
      4.1
    • mvcPathMatcher

      @Deprecated(since="7.0", forRemoval=true) @Bean public org.springframework.util.PathMatcher mvcPathMatcher()
      Deprecated, for removal: This API element is subject to removal in a future version.
      use of PathMatcher and UrlPathHelper is deprecated for use at runtime in web modules in favor of parsed patterns with PathPatternParser.
      Return a global PathMatcher instance which is used for URL path matching with String patterns. The returned instance can be configured using configurePathMatch(PathMatchConfigurer).

      Note: This is only used when parsed patterns are not enabled.

      Since:
      4.1
    • mvcContentNegotiationManager

      @Bean public org.springframework.web.accept.ContentNegotiationManager mvcContentNegotiationManager()
      Return a ContentNegotiationManager instance to use to determine requested media types in a given request.
    • getDefaultMediaTypes

      protected Map<String, org.springframework.http.MediaType> getDefaultMediaTypes()
    • configureContentNegotiation

      protected void configureContentNegotiation(ContentNegotiationConfigurer configurer)
      Override this method to configure content negotiation.
      See Also:
    • mvcApiVersionStrategy

      @Bean public @Nullable org.springframework.web.accept.ApiVersionStrategy mvcApiVersionStrategy()
      Return the central strategy to manage API versioning with, or null if the application does not use versioning.
      Since:
      7.0
    • configureApiVersioning

      protected void configureApiVersioning(ApiVersionConfigurer configurer)
      Override this method to configure API versioning.
      Since:
      7.0
    • viewControllerHandlerMapping

      @Bean public @Nullable HandlerMapping viewControllerHandlerMapping(@Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider)
      Return a handler mapping ordered at 1 to map URL paths directly to view names. To configure view controllers, override addViewControllers(ViewControllerRegistry).
    • addViewControllers

      protected void addViewControllers(ViewControllerRegistry registry)
      Override this method to add view controllers.
      See Also:
    • beanNameHandlerMapping

      @Bean public BeanNameUrlHandlerMapping beanNameHandlerMapping(@Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider)
      Return a BeanNameUrlHandlerMapping ordered at 2 to map URL paths to controller bean names.
    • routerFunctionMapping

      @Bean public RouterFunctionMapping routerFunctionMapping(@Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider, @Qualifier("mvcApiVersionStrategy") @Nullable org.springframework.web.accept.ApiVersionStrategy versionStrategy)
      Return a RouterFunctionMapping ordered at -1 to map router functions. Consider overriding one of these other more fine-grained methods:
      Since:
      5.2
    • resourceHandlerMapping

      @Bean public @Nullable HandlerMapping resourceHandlerMapping(@Qualifier("mvcContentNegotiationManager") org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager, @Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider)
      Return a handler mapping ordered at Integer.MAX_VALUE-1 with mapped resource handlers. To configure resource handling, override addResourceHandlers(ResourceHandlerRegistry).
    • addResourceHandlers

      protected void addResourceHandlers(ResourceHandlerRegistry registry)
      Override this method to add resource handlers for serving static resources.
      See Also:
    • mvcResourceUrlProvider

      @Bean public ResourceUrlProvider mvcResourceUrlProvider()
      A ResourceUrlProvider bean for use with the MVC dispatcher.
      Since:
      4.1
    • defaultServletHandlerMapping

      @Bean public @Nullable HandlerMapping defaultServletHandlerMapping()
      Return a handler mapping ordered at Integer.MAX_VALUE with a mapped default servlet handler. To configure "default" Servlet handling, override configureDefaultServletHandling(DefaultServletHandlerConfigurer).
    • configureDefaultServletHandling

      protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
      Override this method to configure "default" Servlet handling.
      See Also:
    • requestMappingHandlerAdapter

      @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter(@Qualifier("mvcContentNegotiationManager") org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager, @Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("mvcValidator") org.springframework.validation.Validator validator)
      Returns a RequestMappingHandlerAdapter for processing requests through annotated controller methods. Consider overriding one of these other more fine-grained methods:
    • createRequestMappingHandlerAdapter

      protected RequestMappingHandlerAdapter createRequestMappingHandlerAdapter()
      Protected method for plugging in a custom subclass of RequestMappingHandlerAdapter.
      Since:
      4.3
    • handlerFunctionAdapter

      @Bean public HandlerFunctionAdapter handlerFunctionAdapter()
      Returns a HandlerFunctionAdapter for processing requests through handler functions.
      Since:
      5.2
    • getConfigurableWebBindingInitializer

      protected org.springframework.web.bind.support.ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer(org.springframework.format.support.FormattingConversionService mvcConversionService, org.springframework.validation.Validator mvcValidator)
      Return the ConfigurableWebBindingInitializer to use for initializing all WebDataBinder instances.
    • getMessageCodesResolver

      protected @Nullable org.springframework.validation.MessageCodesResolver getMessageCodesResolver()
      Override this method to provide a custom MessageCodesResolver.
    • mvcConversionService

      @Bean public org.springframework.format.support.FormattingConversionService mvcConversionService()
      Return a FormattingConversionService for use with annotated controllers.

      See addFormatters(FormatterRegistry) as an alternative to overriding this method.

    • addFormatters

      protected void addFormatters(org.springframework.format.FormatterRegistry registry)
      Override this method to add custom Converter and/or Formatter delegates to the common FormattingConversionService.
      See Also:
    • mvcValidator

      @Bean public org.springframework.validation.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 OptionalValidatorFactoryBean.If a JSR-303 implementation is not available, a no-op Validator is returned.
    • getValidator

      protected @Nullable org.springframework.validation.Validator getValidator()
      Override this method to provide a custom Validator.
    • getArgumentResolvers

      protected final List<org.springframework.web.method.support.HandlerMethodArgumentResolver> getArgumentResolvers()
      Provide access to the shared custom argument resolvers used by the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver.

      This method cannot be overridden; use addArgumentResolvers(List) instead.

      Since:
      4.3
    • addArgumentResolvers

      protected void addArgumentResolvers(List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
      Add custom HandlerMethodArgumentResolvers 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 (for example, @RequestParameter, @PathVariable, etc). The latter can be customized by configuring the RequestMappingHandlerAdapter directly.

      Parameters:
      argumentResolvers - the list of custom converters (initially an empty list)
    • getReturnValueHandlers

      protected final List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> getReturnValueHandlers()
      Provide access to the shared return value handlers used by the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver.

      This method cannot be overridden; use addReturnValueHandlers(List) instead.

      Since:
      4.3
    • addReturnValueHandlers

      protected void addReturnValueHandlers(List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> returnValueHandlers)
      Add custom HandlerMethodReturnValueHandlers 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 (for example, @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<org.springframework.http.converter.HttpMessageConverter<?>> getMessageConverters()
      Provides access to the shared HttpMessageConverters used by the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver.

      This method cannot be overridden; use configureMessageConverters(HttpMessageConverters.ServerBuilder) instead. Also see addDefaultHttpMessageConverters(List) for adding default message converters.

    • createMessageConverters

      protected org.springframework.http.converter.HttpMessageConverters createMessageConverters()
      Override this method to create a custom HttpMessageConverters. Converters will be used with the RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver.

      By default, this will create an instance with default message converters registered, if present on the classpath.

      Since:
      7.0
    • configureMessageConverters

      protected void configureMessageConverters(org.springframework.http.converter.HttpMessageConverters.ServerBuilder builder)
      Override this method to configure the message converters on the given builder.
      Parameters:
      builder - the HttpMessageConverters builder to configure
      Since:
      7.0
    • configureMessageConverters

      @Deprecated(since="7.0", forRemoval=true) protected void configureMessageConverters(List<org.springframework.http.converter.HttpMessageConverter<?>> converters)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Override this method to add custom messsage converters 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) for adding default message converters.

      Parameters:
      converters - a list to add message converters to (initially an empty list)
    • extendMessageConverters

      @Deprecated(since="7.0", forRemoval=true) protected void extendMessageConverters(List<org.springframework.http.converter.HttpMessageConverter<?>> converters)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Override this method to extend or modify the list of converters after it has been configured. This may be useful for example to allow default converters to be registered and then insert a custom converter through this method.
      Parameters:
      converters - the list of configured converters to extend
      Since:
      4.1.3
    • addDefaultHttpMessageConverters

      @Deprecated(since="7.0", forRemoval=true) protected final void addDefaultHttpMessageConverters(List<org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since 7.0 in favor of createMessageConverters()
      Adds a set of default HttpMessageConverter instances to the given list. Subclasses can call this method from configureMessageConverters(HttpMessageConverters.ServerBuilder).
      Parameters:
      messageConverters - the list to add the default message converters to
    • getAsyncSupportConfigurer

      protected AsyncSupportConfigurer getAsyncSupportConfigurer()
      Since:
      5.3.2
    • configureAsyncSupport

      protected void configureAsyncSupport(AsyncSupportConfigurer configurer)
      Override this method to configure asynchronous request processing options.
      See Also:
    • mvcUriComponentsContributor

      @Bean public org.springframework.web.method.support.CompositeUriComponentsContributor mvcUriComponentsContributor(@Qualifier("mvcConversionService") org.springframework.format.support.FormattingConversionService conversionService, @Qualifier("requestMappingHandlerAdapter") RequestMappingHandlerAdapter requestMappingHandlerAdapter)
      Return an instance of CompositeUriComponentsContributor for use with MvcUriComponentsBuilder.
      Since:
      4.0
    • httpRequestHandlerAdapter

      @Bean public HttpRequestHandlerAdapter httpRequestHandlerAdapter()
      Returns a HttpRequestHandlerAdapter for processing requests with HttpRequestHandlers.
    • simpleControllerHandlerAdapter

      @Bean public SimpleControllerHandlerAdapter simpleControllerHandlerAdapter()
      Returns a SimpleControllerHandlerAdapter for processing requests with interface-based controllers.
    • handlerExceptionResolver

      @Bean public HandlerExceptionResolver handlerExceptionResolver(@Qualifier("mvcContentNegotiationManager") org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)
      Returns a HandlerExceptionResolverComposite containing a list of exception resolvers obtained either through configureHandlerExceptionResolvers(List) or through addDefaultHandlerExceptionResolvers(List, ContentNegotiationManager).

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

    • configureHandlerExceptionResolvers

      protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
      Override this method to configure the list of HandlerExceptionResolvers to use.

      Adding resolvers to the list turns off the default resolvers that would otherwise be registered by default. Also see addDefaultHandlerExceptionResolvers(List, ContentNegotiationManager) that can be used to add the default exception resolvers.

      Parameters:
      exceptionResolvers - a list to add exception resolvers to (initially an empty list)
    • extendHandlerExceptionResolvers

      protected void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
      Override this method to extend or modify the list of HandlerExceptionResolvers after it has been configured.

      This may be useful for example to allow default resolvers to be registered and then insert a custom one through this method.

      Parameters:
      exceptionResolvers - the list of configured resolvers to extend.
      Since:
      4.3
    • addDefaultHandlerExceptionResolvers

      protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers, org.springframework.web.accept.ContentNegotiationManager mvcContentNegotiationManager)
      A method available to subclasses for adding default HandlerExceptionResolvers.

      Adds the following exception resolvers:

    • createExceptionHandlerExceptionResolver

      protected ExceptionHandlerExceptionResolver createExceptionHandlerExceptionResolver()
      Protected method for plugging in a custom subclass of ExceptionHandlerExceptionResolver.
      Since:
      4.3
    • getErrorResponseInterceptors

      protected final List<org.springframework.web.ErrorResponse.Interceptor> getErrorResponseInterceptors()
      Provide access to the list of ErrorResponse.Interceptor's to apply when rendering error responses.

      This method cannot be overridden; use configureErrorResponseInterceptors(List) instead.

      Since:
      6.2
    • configureErrorResponseInterceptors

      protected void configureErrorResponseInterceptors(List<org.springframework.web.ErrorResponse.Interceptor> interceptors)
      Override this method for control over the ErrorResponse.Interceptor's to apply when rendering error responses.
      Parameters:
      interceptors - the list to add handlers to
      Since:
      6.2
    • mvcViewResolver

      @Bean public ViewResolver mvcViewResolver(@Qualifier("mvcContentNegotiationManager") org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)
      Register a ViewResolverComposite that contains a chain of view resolvers to use for view resolution. By default, this resolver is ordered at 0 unless content negotiation view resolution is used in which case the order is raised to Ordered.HIGHEST_PRECEDENCE.

      If no other resolvers are configured, ViewResolverComposite.resolveViewName(String, Locale) returns null in order to allow other potential ViewResolver beans to resolve views.

      Since:
      4.1
    • configureViewResolvers

      protected void configureViewResolvers(ViewResolverRegistry registry)
      Override this method to configure view resolution.
      See Also:
    • getCorsConfigurations

      protected final Map<String, org.springframework.web.cors.CorsConfiguration> getCorsConfigurations()
      Return the registered CorsConfiguration objects, keyed by path pattern.
      Since:
      4.2
    • addCorsMappings

      protected void addCorsMappings(CorsRegistry registry)
      Override this method to configure cross-origin requests processing.
      Since:
      4.2
      See Also:
    • mvcHandlerMappingIntrospector

      @Bean @Lazy public HandlerMappingIntrospector mvcHandlerMappingIntrospector()
    • localeResolver

      @Bean public LocaleResolver localeResolver()
    • flashMapManager

      @Bean public FlashMapManager flashMapManager()
    • viewNameTranslator

      @Bean public RequestToViewNameTranslator viewNameTranslator()