原理
Spring MVC把请求映射和处理过程放到try catch中,捕获到异常后,使用异常处理bean进行处理。所有异常处理bean按照order属性排序,在处理过程中,遇到第一个成功处理异常的异常处理bean之后,不再调用后续的异常处理bean。
实现方式
- 使用 @ ExceptionHandler 注解
- 实现 HandlerExceptionResolver 接口
- 使用 @controlleradvice 注解
介绍其中一种:实现 HandlerExceptionResolver 接口
//AbstractHandlerExceptionResolver实现了HandlerExceptionResolver
public class WebExceptionHandlerResolver extends AbstractHandlerExceptionResolver {
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response,
@Nullable Object handler, Exception ex) {
//这个WebExceptionView是自己定义的一个View,实现了view接口
//可以自己根据需求去定义一个
WebExceptionView view = new WebExceptionView(ex, handler);
return new ModelAndView(view);
}
}
这里通过配置的方式加入这个异常处理器,也可以通过注解的方式
@Component
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
resolvers.add(new WebExceptionHandlerResolver());
}
}
网友评论