springboot 全局异常捕获不起作用解决与排查方案

本文详细记录了解决IDEA中GlobalExceptionHandler类不起作用的问题,包括调整编译器排除设置、确保异常正确抛出及匹配、参与编译等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题

使用的是idea,我也不知道为什么,我建立完 GlobalExceptionHandler类之后就被idea给坑了

GlobalExceptionHandler类的小图标显示有一把叉叉,很不起眼的那种,后来一查才知道,原来是被编译器给排除了,气死我了,我今天一个晚上全搞这个问题去了,记录一下

解决方案:

File > Setting > Build > Compiler > Excludes, 把右边对应的显示叉叉的类移除即可

经过几个小时的努力终于爬出了这个坑,总结一下全局异常捕获失效的常见错误

  1. springboot 扫描包的时候出了问题,自己去扫包的地方检查清除,你的idea中GlobalExceptionHandler如果起作用了就会有这个小图标

在这里插入图片描述

  1. 你并没有将异常抛出,(很基础的问题)

    throw new ApiException()  //记得抛出
    
  2. 你自定义的GlobalExceptionHandler类中没有与抛出的Exception相匹配的 Exception

  3. 类没有参与编译,可能被编译器排除了,(我就是被这点坑了)

排查错误的时候多打调试输出,把输出看仔细,你也可以在GlobalExceptionHandler类里面 写Systom.out.println 看看对应的 Exception在抛出后能不能接到,比如这样:

@RestControllerAdvice
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(NullPointerException.class)
    public Result NullPointer(NullPointerException ex){
        System.out.println("捕获到了NullPointerException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR_NULL);
    }

    @ExceptionHandler(ClassCastException.class)
    public Result ClassCastException(ClassCastException ex){
        System.out.println("捕获到了ClassCastException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR_CLASS_CAST);
    }

    @ExceptionHandler(IOException.class)
    public Result IOException(IOException ex){
        System.out.println("捕获到了IOException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR_IO);
    }

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Result HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex){
        System.out.println("捕获到了HttpRequestMethodNotSupportedException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR_MOTHODNOTSUPPORT);
    }

    @ExceptionHandler(ApiException.class)
    public Result ApiException(ApiException ex) {
        System.out.println("捕获到了ApiException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ex.getStatus(),ex.getMessage());
    }

    @ExceptionHandler(RuntimeException.class)
    public Result RuntimeException(RuntimeException ex){
        System.out.println("捕获到了RuntimeException");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR_RUNTION);
    }

    @ExceptionHandler(Exception.class)
    public Result exception(Exception ex){
        System.out.println("捕获到了Exception");
        logger.error(ex.getMessage(),ex);
        return Result.error(ApiResultEnum.ERROR);
    }

}

@ExceptionHandler(NullPointerException.class) 里面的参数的意思是,当你在外部抛出NullPointerException的异常时,这个注解下面对应的方法就会执行,然后我们就能在里面第一行写一个输出语句调试一下,如果不输出,那肯定是这个异常没有被捕获到,

### 回答1: 要搭建ESP32 VSCode开发环境,需要进行以下步骤: 1. 安装VSCode编辑器和ESP-IDF开发框架。 2. 配置VSCodeESP-IDF插件,以便在编辑器中使用ESP-IDF命令。 3. 配置ESP32开发板的驱动程序和串口连接。 4. 创建一个新的ESP32项目,并在VSCode中进行编写和调。 以上是大致的步骤,具体的操作细节可以参考ESP-IDF官方文档和相关教程。 ### 回答2: ESP32是一种非常流行的微控制器,由于其强大的性能和可靠性,使用ESP32进行嵌入式系统的开发变得最为普遍。VISUAL STUDIO CODE是一种流行的开源代码编辑器,可以在Windows,Linux和macOS操作系统上使用。在此处,将演示如何在ESP32和VS Code环境中进行开发。 步骤1:安装ESP32开发环境 首先,可以使用Arduino IDE或Visual Studio Code和PlatformIO安装ESP32开发环境。但是,请确保使用最新版本的ESP32开发板。 步骤2:安装Visual Studio Code 可从官方网站(https://code.visualstudio.com/)下载安装适用于Windows,Linux和macOS的VS Code。 步骤3:安装PlatformIO插件 要将VS Code转换为完整的ESP32 IDE,需要安装PlatformIO IDE插件。打开VS Code,并转到左侧面板中的扩展选项卡。搜索PlatformIO IDE并安装。安装后,扩展可能需要重新启动。 步骤4:创建新的PlatformIO工程 要开始新的ESP32项目,请打开VS Code并按CTRL + SHIFT + P,然后在命令面板中搜索PlatformIO并选择“创建新项目”。此时将打开向导,您可以根据需要选择适当的选项。可以选择ESP32开发板,将PlatformIO作为框架,并指定工程名称。默认情况下,将在文件系统中创建项目,并设置默认文件夹。 步骤5:编写代码和上传 现在,可以开始在VS Code的编辑器中编写代码,还可以使用PlatformIO插件上传代码到ESP32开发板。要开始上传,必须连接板子并单击底部状态栏中的“环境”选项,并选择要使用的端口和开发板。在此处,还可以选择编译代码并将编译文件上传到ESP32。此时,应上传正在编辑的代码。 总结 以此方式,VS Code可以非常容易且可靠地使用ESP32开发板。使用PlatformIO适用于ESP32的IDE建立了非常好的、可扩展的开发环境,能够正常执行各种复杂的开发任务。 ### 回答3: ESP32是一种高度集成的微控制器,由于其强大的处理能力和低功耗特性,它成为了物联网应用中广泛使用的一种芯片。ESP32具有Wi-Fi和蓝牙功能,所以它不仅可以连接到互联网,还可以与周围的无线设备进行通信。为了使用ESP32开发出优秀的应用程序,需要一个可靠的开发环境Vscode是一款强大的集成开发环境,它可以提供丰富的插件和工具来进行代码编辑、调和管理。在使用Vscode开发ESP32项目时,需要安装一些扩展来适应ESP32开发。下面是ESP32 Vscode开发环境搭建方法: 1. 安装Vscode编辑器 在终端或Web浏览器中打开Vscode的官方网站,下载适合自己电脑系统的Vscode编辑器,并安装到本机中。 2. 安装C/C++插件 打开Vscode编辑器,并按Ctrl+Shift+X打开扩展面板。在搜索栏中输入“C/C++插件”,并下载安装。 3. 安装ESP-IDF插件 在扩展面板中搜索栏中输入“ESP-IDF插件”,并下载安装。ESP-IDF插件能够提供ESP32开发环境和工具链,并且可以协助编写ESP32的代码。 4. 配置ESP32开发环境 打开Vscode编辑器,点击“文件”菜单,选择“打开文件夹”,并打开“ESP-IDF”文件夹。此时可以通过编辑.vscode/settings.json文件来设置ESP32开发环境,并且可以进行代码提示、自动完成等功能的设置。 5. 编写ESP32代码 编写基于ESP32的代码后,在Vscode的编辑器中,按下F5调用Esp-Idf terminal,编译和烧录程序。如果需要调程序,可以通过调面板进行单步调或断点调。同时,Vscode还支持使用多种其他的插件和工具,比如ESP32-Arduino插件、PlatformIO插件等来开发ESP32项目。 总结: ESP32 Vscode开发环境搭建并不复杂,如果按照上述的步骤进行操作,就可以很容易地开始轻松地开发ESP32和其他物联网设备的应用程序。期待大家在工作和学习中探索更多的丰富功能。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值