Spring MVC异常处理机制示例详解 Spring MVC 异常处理机制是指在 Spring MVC 框架中,对异常的捕捉和处理的机制。该机制主要是通过 HandlerExceptionResolver 接口来实现的,该接口只有一个处理方法,即 resolveException 方法,该方法将请求、响应、处理器和异常作为参数,并返回一个 ModelAndView 对象。 在 Spring MVC 中,当一个请求发生异常时,DispatcherServlet 将异常交给一个处理链来处理或解析该异常。这是在 request 和 Servlet Container 之间的一道屏障,因此我们可以在这里做一些处理工作,如转换异常,转换成友好的错误页或 HTTP 状态码等。 HandlerExceptionResolver 接口是 Spring MVC 异常处理机制的核心接口,该接口只有一个处理方法,即 resolveException 方法,该方法将请求、响应、处理器和异常作为参数,并返回一个 ModelAndView 对象。对于返回值 ModelAndView,有如下约定:ModelAndView 指向一个页面空的 ModelAndView,表示异常已经在 HandlerExceptionResolver 内部处理完成;null 表示异常未处理,需要继续执行其它的 HandlerExceptionResolver。 Spring 已经提供了以下几种实现: 1. SimpleMappingExceptionResolver:处理逻辑是根据 Exception 的 class name 映射成指定的错误页。 2. DefaultHandlerExceptionResolver:根据异常的类型转成 HTTP 状态码。 3. ResponseStatusExceptionResolver:根据把异常和状态码通过 @ResponseStatus 绑定,当有异常抛出时,最终给客户端返回对应的状态码。 4. ExceptionHandlerExceptionResolver:处理 @ExceptionHandler 的解析类,当有异常发生时,交给 @ExceptionHandler 方法去处理。 自定义异常处理器可以实现 HandlerExceptionResolver,也可以继承 AbstractHandlerExceptionResolver 类,实现 doResolveException 方法即可。这里重点说下功能最为丰富的 ExceptionHandlerExceptionResolver 通过 @ExceptionHandler 注解的方法,被视为异常处理方法,是通过 ExceptionHandlerExceptionResolver 来处理。该方法支持的参数类型有: * Exception:异常对象 * HttpServletRequest:请求对象 * HttpServletResponse:响应对象 * ModelAndView:模型和视图对象 在 DispatcherServlet 中对 HandlerExceptionResolver 的处理是在 processHandlerException 方法中进行的,该方法将遍历所有的 HandlerExceptionResolver,直到找到一个可以处理异常的 Resolver,否则将抛出异常。在 processHandlerException 方法中, DispatcherServlet 会遍历所有的 HandlerExceptionResolver,并调用其 resolveException 方法来处理异常。如果 resolveException 方法返回的 ModelAndView 不为 null,即视作处理完成。 Spring MVC 异常处理机制提供了一种灵活的机制来处理异常,使得开发者可以根据需要选择合适的异常处理方式。
1