SpringBoot、springmvc异常处理(@ControllerAdvice、@RestControllerAdvice、 @ExceptionHandler、BasicExceptionController、SimpleMappingExceptionResolver、HandlerExceptionResolver)

说明

在开发中,会遇到一些错误、异常,如:404找不到资源,500服务器报错

而且,如果浏览器发来请求,就返回 HTML 页面;如果 AJAX、客户度发来请求,就返回 JSON

所以我们一般要实现异常处理,即:一个类、或几个类就能统一处理异常

springboot、springmvc有多种方式处理异常:

  • ※ @ControllerAdvice 和 @ExceptionHandler:增强控制器中实现异常处理方法,详见 链接

  • ※ @RestControllerAdvice 和 @ExceptionHandler:增强控制器中实现异常处理方法,详见 链接

  • ※ BasicExceptionController(ErrorController接口):SpringBoot默认处理异常方式,在没有配置任何异常处理时,SpringBoot就是使用该方式处理异常的。SpringBoot兜底的处理异常方式,可处理 404、500、过滤器抛错。详见 链接

  • @ExceptionHandle:只能在controller中定义异常处理方法,详见 链接

  • SimpleMappingExceptionResolver:拦截异常跳转到error页面,使用较少

  • HandlerExceptionResolver:springmvc框架使用较多,springboot 使用较少,详见 链接

执行顺序

上面处理异常的方式有很多,当controller抛错时,执行顺序是:

controller -> controller内的@ExceptionHandle修饰的方法 -> @ControllerAdvice、@RestControllerAdvice修饰的类的@ExceptionHandle修饰的方法 -> interceptor -> filter -> BasicExceptionController
  1. 当controller抛错,如果该controller有 @ExceptionHandle 修饰的方法,就有该方法处理
  2. 分两种情况:
  3. 如果 @ControllerAdvice、@RestControllerAdvice 修饰的类的 @ExceptionHandle 修饰的方法报错,就由 BasicExceptionController 处理
  4. 如果拦截器报错,就由 BasicExceptionController 处理
  5. 如果过滤器报错,就由 BasicExceptionController 处理

总之:BasicExceptionController 是兜底的异常处理

参考:

https://blog.csdn.net/flyer5/article/details/103836207
https://www.jianshu.com/p/ec932d6091c1


原文出处:/show_1IX74ajxo0V5.html