0
点赞
收藏
分享

微信扫一扫

SpringBoot2 全局捕获异常实例


1. SpringBoot 全局捕获异常

首先写一个会抛出异常的 Controller 类 如下所示,i = 1/0, 0不能作为除数,显然这个 Controller 类  ErrorController.java 会抛出异常。

@EnableAutoConfiguration
@RestController
public class ErrorController {

    @RequestMapping("/errorTest")
    public String errorTest() {
        int i = 1/0; // 错误代码
        return "你好";
    }
}

访问 :http://localhost:8080/errorTest,如下图所示,500 错误(服务器端错误),错误信息 / by zero 。

SpringBoot2 全局捕获异常实例_java

把错误信息直接暴露出来显然不合适,如何处理Controller 类异常,可以使用 try catch 语句捕获异常,但是每个 Controller 都写  try catch 语句 比较臃肿,SpringBoot 中可以使用 @ControllerAdvice 注解全局捕获异常,@ControllerAdvice 注解的原理是 Spring 的 AOP 功能, 在往下的话使用的是 Java 的动态代理技术。

解释完 @ControllerAdvice 注解,下面来试用一下这个注解。全局控制样异常类ControllerExceptionHandler.java如下所示:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class ControllerExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public String exceptionHandler() {
        return "服务器开小差了,马上回来";
    }
}

ErrorController.java不进行修改,再次访问 :http://localhost:8080/errorTest,如下图所示:

SpringBoot2 全局捕获异常实例_java_02

举报

相关推荐

0 条评论