public class WebMvcConfigurationSupport extends Object implements ApplicationContextAware, ServletContextAware
@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
:
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 HandlerAdapters
:
RequestMappingHandlerAdapter
for processing requests with annotated controller methods.
HttpRequestHandlerAdapter
for processing requests with HttpRequestHandlers
.
SimpleControllerHandlerAdapter
for processing requests with interface-based Controllers
.
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
Registers an AntPathMatcher
and a UrlPathHelper
to be used by:
RequestMappingHandlerMapping
,
HandlerMapping
for ViewControllers
HandlerMapping
for serving resources
PathMatchConfigurer
.
Both the RequestMappingHandlerAdapter
and the
ExceptionHandlerExceptionResolver
are configured with default
instances of the following by default:
ContentNegotiationManager
DefaultFormattingConversionService
OptionalValidatorFactoryBean
if a JSR-303 implementation is available on the classpath
HttpMessageConverters
depending on the third-party
libraries available on the classpath.
EnableWebMvc
,
WebMvcConfigurer
Constructor and Description |
---|
WebMvcConfigurationSupport() |
Modifier and Type | Method and Description |
---|---|
protected void |
addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Add custom
HandlerMethodArgumentResolvers
to use in addition to the ones registered by default. |
protected void |
addCorsMappings(CorsRegistry registry)
Override this method to configure cross origin requests processing.
|
protected void |
addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
A method available to subclasses for adding default
HandlerExceptionResolvers . |
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 and/or Formatter
delegates to the common FormattingConversionService . |
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
HandlerMethodReturnValueHandlers
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. |
protected 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
HandlerExceptionResolvers to use. |
protected void |
configureMessageConverters(List<HttpMessageConverter<?>> converters)
Override this method to add custom
HttpMessageConverters
to use with the RequestMappingHandlerAdapter and the
ExceptionHandlerExceptionResolver . |
protected void |
configurePathMatch(PathMatchConfigurer configurer)
Override this method to configure path matching options.
|
protected void |
configureViewResolvers(ViewResolverRegistry registry)
Override this method to configure view resolution.
|
protected ExceptionHandlerExceptionResolver |
createExceptionHandlerExceptionResolver()
Protected method for plugging in a custom subclass of
ExceptionHandlerExceptionResolver . |
protected RequestMappingHandlerAdapter |
createRequestMappingHandlerAdapter()
Protected method for plugging in a custom subclass of
RequestMappingHandlerAdapter . |
protected RequestMappingHandlerMapping |
createRequestMappingHandlerMapping()
Protected method for plugging in a custom subclass of
RequestMappingHandlerMapping . |
HandlerMapping |
defaultServletHandlerMapping()
Return a handler mapping ordered at Integer.MAX_VALUE with a mapped
default servlet handler.
|
protected void |
extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
Override this method to extend or modify the list of
HandlerExceptionResolvers after it has been configured. |
protected void |
extendMessageConverters(List<HttpMessageConverter<?>> converters)
Override this method to extend or modify the list of converters after it has
been configured.
|
ApplicationContext |
getApplicationContext()
Return the associated Spring
ApplicationContext . |
protected List<HandlerMethodArgumentResolver> |
getArgumentResolvers()
Provide access to the shared custom argument resolvers used by the
RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver . |
protected ConfigurableWebBindingInitializer |
getConfigurableWebBindingInitializer()
Return the
ConfigurableWebBindingInitializer to use for
initializing all WebDataBinder instances. |
protected Map<String,CorsConfiguration> |
getCorsConfigurations()
Return the registered
CorsConfiguration objects,
keyed by path pattern. |
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
HttpMessageConverters
used by the RequestMappingHandlerAdapter and the
ExceptionHandlerExceptionResolver . |
protected PathMatchConfigurer |
getPathMatchConfigurer()
Callback for building the
PathMatchConfigurer . |
protected List<HandlerMethodReturnValueHandler> |
getReturnValueHandlers()
Provide access to the shared return value handlers used by the
RequestMappingHandlerAdapter and the ExceptionHandlerExceptionResolver . |
ServletContext |
getServletContext()
Return the associated
ServletContext . |
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(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>) or
through addDefaultHandlerExceptionResolvers(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>) . |
HttpRequestHandlerAdapter |
httpRequestHandlerAdapter()
Returns a
HttpRequestHandlerAdapter for processing requests
with HttpRequestHandlers . |
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 controllers. |
HandlerMappingIntrospector |
mvcHandlerMappingIntrospector() |
PathMatcher |
mvcPathMatcher()
Return a global
PathMatcher instance for path matching
patterns in HandlerMappings . |
ResourceUrlProvider |
mvcResourceUrlProvider()
A
ResourceUrlProvider bean for use with the MVC dispatcher. |
CompositeUriComponentsContributor |
mvcUriComponentsContributor()
Return an instance of
CompositeUriComponentsContributor for use with
MvcUriComponentsBuilder . |
UrlPathHelper |
mvcUrlPathHelper()
Return a global
UrlPathHelper instance for path matching
patterns in HandlerMappings . |
Validator |
mvcValidator()
Return a global
Validator instance for example for validating
@ModelAttribute and @RequestBody method arguments. |
ViewResolver |
mvcViewResolver()
Register a
ViewResolverComposite that contains a chain of view resolvers
to use for view resolution. |
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.
|
public void setApplicationContext(@Nullable ApplicationContext applicationContext)
ApplicationContext
, e.g. for resource loading.setApplicationContext
in interface ApplicationContextAware
applicationContext
- the ApplicationContext object to be used by this objectBeanInitializationException
@Nullable public final ApplicationContext getApplicationContext()
ApplicationContext
.public void setServletContext(@Nullable ServletContext servletContext)
ServletContext
, e.g. for resource handling,
looking up file extensions, etc.setServletContext
in interface ServletContextAware
servletContext
- the ServletContext object to be used by this objectInitializingBean.afterPropertiesSet()
,
ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)
@Nullable public final ServletContext getServletContext()
ServletContext
.@Bean public RequestMappingHandlerMapping requestMappingHandlerMapping()
RequestMappingHandlerMapping
ordered at 0 for mapping
requests to annotated controllers.protected RequestMappingHandlerMapping createRequestMappingHandlerMapping()
RequestMappingHandlerMapping
.protected final Object[] getInterceptors()
HandlerMapping
instances with.
This method cannot be overridden; use addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry)
instead.
protected void addInterceptors(InterceptorRegistry registry)
InterceptorRegistry
protected PathMatchConfigurer getPathMatchConfigurer()
PathMatchConfigurer
.
Delegates to configurePathMatch(org.springframework.web.servlet.config.annotation.PathMatchConfigurer)
.protected void configurePathMatch(PathMatchConfigurer configurer)
PathMatchConfigurer
@Bean public PathMatcher mvcPathMatcher()
PathMatcher
instance for path matching
patterns in HandlerMappings
.
This instance can be configured using the PathMatchConfigurer
in configurePathMatch(PathMatchConfigurer)
.@Bean public UrlPathHelper mvcUrlPathHelper()
UrlPathHelper
instance for path matching
patterns in HandlerMappings
.
This instance can be configured using the PathMatchConfigurer
in configurePathMatch(PathMatchConfigurer)
.@Bean public ContentNegotiationManager mvcContentNegotiationManager()
ContentNegotiationManager
instance to use to determine
requested media types in a given request.protected void configureContentNegotiation(ContentNegotiationConfigurer configurer)
DefaultServletHandlerConfigurer
@Bean @Nullable public HandlerMapping viewControllerHandlerMapping()
addViewControllers(org.springframework.web.servlet.config.annotation.ViewControllerRegistry)
.protected void addViewControllers(ViewControllerRegistry registry)
ViewControllerRegistry
@Bean public BeanNameUrlHandlerMapping beanNameHandlerMapping()
BeanNameUrlHandlerMapping
ordered at 2 to map URL
paths to controller bean names.@Bean @Nullable public HandlerMapping resourceHandlerMapping()
addResourceHandlers(org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry)
.protected void addResourceHandlers(ResourceHandlerRegistry registry)
ResourceHandlerRegistry
@Bean public ResourceUrlProvider mvcResourceUrlProvider()
ResourceUrlProvider
bean for use with the MVC dispatcher.@Bean @Nullable public HandlerMapping defaultServletHandlerMapping()
configureDefaultServletHandling(org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer)
.protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
DefaultServletHandlerConfigurer
@Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter()
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.
protected RequestMappingHandlerAdapter createRequestMappingHandlerAdapter()
RequestMappingHandlerAdapter
.protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer()
ConfigurableWebBindingInitializer
to use for
initializing all WebDataBinder
instances.@Nullable protected MessageCodesResolver getMessageCodesResolver()
MessageCodesResolver
.protected void configureAsyncSupport(AsyncSupportConfigurer configurer)
AsyncSupportConfigurer
@Bean public FormattingConversionService mvcConversionService()
FormattingConversionService
for use with annotated controllers.
See addFormatters(org.springframework.format.FormatterRegistry)
as an alternative to overriding this method.
protected void addFormatters(FormatterRegistry registry)
Converter
and/or Formatter
delegates to the common FormattingConversionService
.mvcConversionService()
@Bean public Validator mvcValidator()
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.@Nullable protected Validator getValidator()
Validator
.protected final List<HandlerMethodArgumentResolver> getArgumentResolvers()
RequestMappingHandlerAdapter
and the ExceptionHandlerExceptionResolver
.
This method cannot be overridden; use addArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
instead.
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
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 (e.g. @RequestParameter
,
@PathVariable
, etc). The latter can be customized by configuring the
RequestMappingHandlerAdapter
directly.
argumentResolvers
- the list of custom converters (initially an empty list)protected final List<HandlerMethodReturnValueHandler> getReturnValueHandlers()
RequestMappingHandlerAdapter
and the ExceptionHandlerExceptionResolver
.
This method cannot be overridden; use addReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
instead.
protected void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
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 (e.g. @ResponseBody
,
@ModelAttribute
, etc). The latter can be customized by configuring the
RequestMappingHandlerAdapter
directly.
returnValueHandlers
- the list of custom handlers (initially an empty list)protected final List<HttpMessageConverter<?>> getMessageConverters()
HttpMessageConverters
used by the RequestMappingHandlerAdapter
and the
ExceptionHandlerExceptionResolver
.
This method cannot be overridden; use configureMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>)
instead.
Also see addDefaultHttpMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>)
for adding default message converters.
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters)
HttpMessageConverters
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(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>)
for adding default message converters.
converters
- a list to add message converters to (initially an empty list)protected void extendMessageConverters(List<HttpMessageConverter<?>> converters)
converters
- the list of configured converters to extendprotected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters)
configureMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>)
.messageConverters
- the list to add the default message converters to@Bean public CompositeUriComponentsContributor mvcUriComponentsContributor()
CompositeUriComponentsContributor
for use with
MvcUriComponentsBuilder
.@Bean public HttpRequestHandlerAdapter httpRequestHandlerAdapter()
HttpRequestHandlerAdapter
for processing requests
with HttpRequestHandlers
.@Bean public SimpleControllerHandlerAdapter simpleControllerHandlerAdapter()
SimpleControllerHandlerAdapter
for processing requests
with interface-based controllers.@Bean public HandlerExceptionResolver handlerExceptionResolver()
HandlerExceptionResolverComposite
containing a list of exception
resolvers obtained either through configureHandlerExceptionResolvers(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>)
or
through addDefaultHandlerExceptionResolvers(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>)
.
Note: This method cannot be made final due to CGLIB constraints.
Rather than overriding it, consider overriding configureHandlerExceptionResolvers(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>)
which allows for providing a list of resolvers.
protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
HandlerExceptionResolvers
to use.
Adding resolvers to the list turns off the default resolvers that would otherwise
be registered by default. Also see addDefaultHandlerExceptionResolvers(java.util.List<org.springframework.web.servlet.HandlerExceptionResolver>)
that can be used to add the default exception resolvers.
exceptionResolvers
- a list to add exception resolvers to (initially an empty list)protected void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
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.
exceptionResolvers
- the list of configured resolvers to extend.protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers)
HandlerExceptionResolvers
.
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
protected ExceptionHandlerExceptionResolver createExceptionHandlerExceptionResolver()
ExceptionHandlerExceptionResolver
.@Bean public ViewResolver mvcViewResolver()
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.
protected void configureViewResolvers(ViewResolverRegistry registry)
ViewResolverRegistry
protected final Map<String,CorsConfiguration> getCorsConfigurations()
CorsConfiguration
objects,
keyed by path pattern.protected void addCorsMappings(CorsRegistry registry)
CorsRegistry
@Bean @Lazy public HandlerMappingIntrospector mvcHandlerMappingIntrospector()