public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExceptionResolver implements ApplicationContextAware, InitializingBean
AbstractHandlerMethodExceptionResolver
that resolves exceptions
through @ExceptionHandler
methods.
Support for custom argument and return value types can be added via
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
and setCustomReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
.
Or alternatively to re-configure all argument and return value types use
setArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
and setReturnValueHandlers(List)
.
logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
ExceptionHandlerExceptionResolver() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware , ApplicationContextAware etc. |
protected ModelAndView |
doResolveHandlerMethodException(HttpServletRequest request,
HttpServletResponse response,
HandlerMethod handlerMethod,
Exception exception)
Find an
@ExceptionHandler method and invoke it to handle the raised exception. |
ApplicationContext |
getApplicationContext() |
HandlerMethodArgumentResolverComposite |
getArgumentResolvers()
Return the configured argument resolvers, or possibly
null if
not initialized yet via afterPropertiesSet() . |
ContentNegotiationManager |
getContentNegotiationManager()
Return the configured
ContentNegotiationManager . |
List<HandlerMethodArgumentResolver> |
getCustomArgumentResolvers()
Return the custom argument resolvers, or
null . |
List<HandlerMethodReturnValueHandler> |
getCustomReturnValueHandlers()
Return the custom return value handlers, or
null . |
protected List<HandlerMethodArgumentResolver> |
getDefaultArgumentResolvers()
Return the list of argument resolvers to use including built-in resolvers
and custom resolvers provided via
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>) . |
protected List<HandlerMethodReturnValueHandler> |
getDefaultReturnValueHandlers()
Return the list of return value handlers to use including built-in and
custom handlers provided via
setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>) . |
Map<ControllerAdviceBean,ExceptionHandlerMethodResolver> |
getExceptionHandlerAdviceCache()
Return an unmodifiable Map with the
@ControllerAdvice
beans discovered in the ApplicationContext. |
protected ServletInvocableHandlerMethod |
getExceptionHandlerMethod(HandlerMethod handlerMethod,
Exception exception)
Find an
@ExceptionHandler method for the given exception. |
List<HttpMessageConverter<?>> |
getMessageConverters()
Return the configured message body converters.
|
HandlerMethodReturnValueHandlerComposite |
getReturnValueHandlers()
Return the configured handlers, or possibly
null if not
initialized yet via afterPropertiesSet() . |
protected boolean |
hasGlobalExceptionHandlers()
Whether this resolver has global exception handlers, e.g.
|
void |
setApplicationContext(ApplicationContext applicationContext)
Set the ApplicationContext that this object runs in.
|
void |
setArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Configure the complete list of supported argument types thus overriding
the resolvers that would otherwise be configured by default.
|
void |
setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
Set the
ContentNegotiationManager to use to determine requested media types. |
void |
setCustomArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Provide resolvers for custom argument types.
|
void |
setCustomReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Provide handlers for custom return value types.
|
void |
setMessageConverters(List<HttpMessageConverter<?>> messageConverters)
Set the message body converters to use.
|
void |
setResponseBodyAdvice(List<ResponseBodyAdvice<?>> responseBodyAdvice)
Add one or more components to be invoked after the execution of a controller
method annotated with
@ResponseBody or returning ResponseEntity
but before the body is written to the response with the selected
HttpMessageConverter . |
void |
setReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Configure the complete list of supported return value types thus
overriding handlers that would otherwise be configured by default.
|
doResolveException, shouldApplyTo
buildLogMessage, getOrder, hasHandlerMappings, logException, prepareResponse, preventCaching, resolveException, setMappedHandlerClasses, setMappedHandlers, setOrder, setPreventResponseCaching, setWarnLogCategory
public void setCustomArgumentResolvers(@Nullable List<HandlerMethodArgumentResolver> argumentResolvers)
setArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
instead.@Nullable public List<HandlerMethodArgumentResolver> getCustomArgumentResolvers()
null
.public void setArgumentResolvers(@Nullable List<HandlerMethodArgumentResolver> argumentResolvers)
@Nullable public HandlerMethodArgumentResolverComposite getArgumentResolvers()
null
if
not initialized yet via afterPropertiesSet()
.public void setCustomReturnValueHandlers(@Nullable List<HandlerMethodReturnValueHandler> returnValueHandlers)
setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
.@Nullable public List<HandlerMethodReturnValueHandler> getCustomReturnValueHandlers()
null
.public void setReturnValueHandlers(@Nullable List<HandlerMethodReturnValueHandler> returnValueHandlers)
@Nullable public HandlerMethodReturnValueHandlerComposite getReturnValueHandlers()
null
if not
initialized yet via afterPropertiesSet()
.public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters)
These converters are used to convert from and to HTTP requests and responses.
public List<HttpMessageConverter<?>> getMessageConverters()
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
ContentNegotiationManager
to use to determine requested media types.
If not set, the default constructor is used.public ContentNegotiationManager getContentNegotiationManager()
ContentNegotiationManager
.public void setResponseBodyAdvice(@Nullable List<ResponseBodyAdvice<?>> responseBodyAdvice)
@ResponseBody
or returning ResponseEntity
but before the body is written to the response with the selected
HttpMessageConverter
.public void setApplicationContext(@Nullable ApplicationContext applicationContext)
ApplicationContextAware
Invoked after population of normal bean properties but before an init callback such
as InitializingBean.afterPropertiesSet()
or a custom init-method. Invoked after ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
,
ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
and
MessageSourceAware
, if applicable.
setApplicationContext
in interface ApplicationContextAware
applicationContext
- the ApplicationContext object to be used by this objectBeanInitializationException
@Nullable public ApplicationContext getApplicationContext()
public void afterPropertiesSet()
InitializingBean
BeanFactory
after it has set all bean properties
and satisfied BeanFactoryAware
, ApplicationContextAware
etc.
This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet
in interface InitializingBean
public Map<ControllerAdviceBean,ExceptionHandlerMethodResolver> getExceptionHandlerAdviceCache()
@ControllerAdvice
beans discovered in the ApplicationContext. The returned map will be empty if
the method is invoked before the bean has been initialized via
afterPropertiesSet()
.protected List<HandlerMethodArgumentResolver> getDefaultArgumentResolvers()
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
.protected List<HandlerMethodReturnValueHandler> getDefaultReturnValueHandlers()
setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
.protected boolean hasGlobalExceptionHandlers()
AbstractHandlerMethodExceptionResolver
HandlerMethod
that raised the exception and
therefore can apply to any handler.hasGlobalExceptionHandlers
in class AbstractHandlerMethodExceptionResolver
@Nullable protected ModelAndView doResolveHandlerMethodException(HttpServletRequest request, HttpServletResponse response, @Nullable HandlerMethod handlerMethod, Exception exception)
@ExceptionHandler
method and invoke it to handle the raised exception.doResolveHandlerMethodException
in class AbstractHandlerMethodExceptionResolver
request
- current HTTP requestresponse
- current HTTP responsehandlerMethod
- the executed handler method, or null
if none chosen at the time
of the exception (for example, if multipart resolution failed)exception
- the exception that got thrown during handler executionnull
for default processing@Nullable protected ServletInvocableHandlerMethod getExceptionHandlerMethod(@Nullable HandlerMethod handlerMethod, Exception exception)
@ExceptionHandler
method for the given exception. The default
implementation searches methods in the class hierarchy of the controller first
and if not found, it continues searching for additional @ExceptionHandler
methods assuming some @ControllerAdvice
Spring-managed beans were detected.handlerMethod
- the method where the exception was raised (may be null
)exception
- the raised exceptionnull
if none