异常在哪里处理的呢
DispatcherServlet : processHandlerException
中
默认的处理器
HandlerExceptionResolverComposite
其中有三个resolver
在WebMvcConfigurationSupport中添加
ExceptionHandlerExceptionResolver
中
exceptionHandlerAdviceCache中就有controllerAdvice注解的bean
初始化的时候就会通过afterPropertiesSet
DispatcherServlet : processHandlerException
中
默认的处理器
HandlerExceptionResolverComposite
其中有三个resolver
在WebMvcConfigurationSupport中添加
/**
* A method available to subclasses for adding default {@link HandlerExceptionResolver}s.
* <p>Adds the following exception resolvers:
* <ul>
* <li>{@link ExceptionHandlerExceptionResolver}
* for handling exceptions through @{@link ExceptionHandler} methods.
* <li>{@link ResponseStatusExceptionResolver}
* for exceptions annotated with @{@link ResponseStatus}.
* <li>{@link DefaultHandlerExceptionResolver}
* for resolving known Spring exception types
* </ul>
*/
protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
ExceptionHandlerExceptionResolver exceptionHandlerExceptionResolver = new ExceptionHandlerExceptionResolver();
exceptionHandlerExceptionResolver.setContentNegotiationManager(mvcContentNegotiationManager());
exceptionHandlerExceptionResolver.setMessageConverters(getMessageConverters());
if (jackson2Present) {
List<ResponseBodyAdvice<?>> interceptors = new ArrayList<ResponseBodyAdvice<?>>();
interceptors.add(new JsonViewResponseBodyAdvice());
exceptionHandlerExceptionResolver.setResponseBodyAdvice(interceptors);
}
exceptionHandlerExceptionResolver.setApplicationContext(this.applicationContext);
exceptionHandlerExceptionResolver.afterPropertiesSet();
exceptionResolvers.add(exceptionHandlerExceptionResolver);
ResponseStatusExceptionResolver responseStatusExceptionResolver = new ResponseStatusExceptionResolver();
responseStatusExceptionResolver.setMessageSource(this.applicationContext);
exceptionResolvers.add(responseStatusExceptionResolver);
exceptionResolvers.add(new DefaultHandlerExceptionResolver());
}ExceptionHandlerExceptionResolver
中
exceptionHandlerAdviceCache中就有controllerAdvice注解的bean
初始化的时候就会通过afterPropertiesSet
本文详细介绍了Spring MVC框架中异常处理的核心组件与流程。重点解析了DispatcherServlet如何通过HandlerExceptionResolverComposite来处理异常,包括使用ExceptionHandlerExceptionResolver处理带有@ExceptionHandler的方法,ResponseStatusExceptionResolver处理带有@ResponseStatus注解的异常,以及DefaultHandlerExceptionResolver处理已知的Spring异常。
566

被折叠的 条评论
为什么被折叠?



