3.17.1 Spring MVC异常处理接口以及实现类

3.17.1 Spring MVC异常处理接口以及实现类

HandlerExceptionResolver接口

HandlerExceptionResolverSpring3.0之后新增的一个重要接口,负责Spring MVC的异常处理.
该接口只有一个方法签名:

1
2
3
4
5
6
ModelAndView resolveException(
HttpServletRequest request,
HttpServletResponse response,
@Nullable java.lang.Object handler,
java.lang.Exception ex
)

resolveException方法处理程序执行期间被抛出的异常,返回一个模型和视图,视图通常是一个特定的错误处理页面。

AbstractHandlerExceptionResolver抽象类

AbstractHandlerExceptionResolver抽象类实现了HandlerExceptionResolver接口,重写了HandlerExceptionResolver接口的resolveException方法用于处理异常.

AbstractHandlerMethodExceptionResolver抽象类

AbstractHandlerMethodExceptionResolver抽象类继承了AbstractHandlerExceptionResolver抽象类,该类主要就是为HandlerMethod类服务,即handler参数是HandlerMethod类型。

ExceptionHandlerExceptionResolver类

ExceptionHandlerExceptionResolver类继承自AbstractHandlerMethodExceptionResolver,该类主要处理Controller中使用@ExceptionHandler注解的方法和@ControllerAdvice注解定义的类。该类也是<mvc:annotation- driven/>配置中定义的HandlerExceptionResolver实现类之一,大多数异常处理都由该类操作

SimpleMappingExceptionResolver类

SimpleMappingExceptionResolver继承自AbstractHandlerExceptionResolver抽象类,SimpleMappingExceptionResolver是一个根据配置来解析异常的类,包括异常类型、默认的错误视图、默认的响应码及异常映射等配置属性。

两个实现类的用途

因此,在Spring MVC中进行异常处理,

  • 如果选择XML配置,则使用SimpleMappingExceptionResolver类;
  • 如果使用@ExceptionHandler注解和@ControllerAdvice注解,则由ExceptionHandlerExceptionResolver类进行处理。

提示:SimpleMappingExceptionResolverExceptionHandlerExceptionResolver这两种异常处理方式在项目中不能共存,在开发中通常根据实际情况来选择。