SpringBoot捕获全局异常

理论

  • 从 spring 3.2 开始,新增了 @ControllerAdvice 注解,可以用于定义 @ExceptionHandler,并应用到配置了 @RequestMapping 的控制器中。

    操作

    1. 定义全局异常捕捉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";
        }
    }
    
  1. 抛出异常
    @GetMapping("/exception")
     public String testException(){
         System.out.println("开始");
    
         System.out.println(2/0);
    
         System.out.println("结束");
         return "SpringBoot OK";
     }
    
  2. 结果验证

局限

使用 @ControllerAdvice处理异常也有一定的 局限性。只有进入 Controller 层的错误,才会由 @ControllerAdvice 处理。拦截器 抛出的错误,以及 访问错误地址 的情况 @ControllerAdvice 处理不了,由 Spring Boot 默认的 异常处理机制 处理。

参考