SpringBoot捕获全局异常
理论
-
从 spring 3.2 开始,新增了
@ControllerAdvice
注解,可以用于定义@ExceptionHandler
,并应用到配置了@RequestMapping
的控制器中。操作
- 定义全局异常捕捉Controller
package com.yeyouluo.hellospringboot.exception; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = RuntimeException.class) @ResponseBody public String handle() { return "捕获到全局RuntimeException"; } }
- 抛出异常
@GetMapping("/exception") public String testException(){ System.out.println("开始"); System.out.println(2/0); System.out.println("结束"); return "SpringBoot OK"; }
- 结果验证
局限
使用 @ControllerAdvice
处理异常也有一定的 局限性。只有进入 Controller 层的错误,才会由 @ControllerAdvice
处理。拦截器 抛出的错误,以及 访问错误地址 的情况 @ControllerAdvice
处理不了,由 Spring Boot 默认的 异常处理机制 处理。