spring mvc框架的异常处理机制

Spring MVC处理异常主要依赖于HandlerExceptionResolver接口及其实现类默认会启动它的三个对象:

  • org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver
  • org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
  • org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

我们也可以实现该接口并且配置成bean,spring mvc容器会自动找到它,这样会覆盖spring的默认配置。

  • 1.ExceptionHandlerExceptionResolver的实现去寻找Controller类中有@ExceptionHandler注解的的方法,用其去处理异常,该方法的参数、返回值类型的限制跟@RequestMapping标识的处理方法一致。
  • 2.ResponseStatusExceptionResolver会查找抛出的异常的类有没有注解:@ResponseStatus,如果有,就直接用Response.setError(errorCode,errorReason),参数取自ResponseStatus注解中的值。
  • 3.DefaultHandlerExceptionResolver只处理了Spring内部经常出现的一些异常,设置Response.setError(errorCode,errorReason)后,直接返回空的ModelAndView对象。

各个HandlerExceptionResolver执行的顺序由Ordered接口,从前到后执行直到某个HandlerExceptionResolver返回了ModelAndView,如果所有HandlerExceptionResolver都没有返回,就将异常原样throw出去,交由servlet容器来处理。

相关推荐