SpringBoot 如何使用 @ControllerAdvice 注解进行全局异常处理

在 Spring Boot 应用中,异常处理是非常重要的一部分,它可以帮助我们捕获并处理应用程序中出现的异常情况,提高应用程序的健壮性和可靠性。在 Spring Boot 中,我们可以使用 @ControllerAdvice 注解来实现全局异常处理。本文将介绍 @ControllerAdvice 注解的使用和原理。

在这里插入图片描述

@ControllerAdvice 注解的作用

@ControllerAdvice 注解用于定义全局异常处理器,它可以处理应用程序中任意一个控制器抛出的异常。当控制器抛出异常时,Spring Boot 会自动调用与异常类型匹配的异常处理器,将异常信息传递给异常处理器,由异常处理器进行处理。

@ControllerAdvice 注解的使用

首先,我们创建一个 Spring Boot 应用,并添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.3</version>
</dependency>

这些依赖将引入 Spring Boot 的 web 相关组件。

接着,我们创建一个名为 MyExceptionHandler 的类,使用 @ControllerAdvice 注解来定义异常处理器:

@ControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");}
}

在这个类中,我们使用 @ControllerAdvice 注解定义了一个全局异常处理器。@ExceptionHandler 注解用于定义异常处理方法,它可以处理指定类型的异常。在这个例子中,我们使用 Exception.class 来指定处理所有类型的异常。处理方法返回一个 ResponseEntity 对象,它包含了 HTTP 响应的状态码和响应体。

最后,我们在控制器中抛出异常,测试异常处理器的功能:

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {throw new RuntimeException("Unexpected error");}
}

在这个控制器中,我们定义了一个名为 hello 的接口,它会抛出一个 RuntimeException 异常。当我们访问这个接口时,异常处理器会捕获到这个异常,并返回一个 HTTP 500 错误码。

@ControllerAdvice 注解的原理

当控制器抛出异常时,Spring Boot 会查找与异常类型匹配的异常处理器。如果找到了匹配的异常处理器,Spring Boot 会调用异常处理器的处理方法,并将异常信息传递给处理方法。处理方法可以对异常信息进行处理,并返回一个 ResponseEntity 对象,其中包含了 HTTP 响应的状态码和响应体。如果没有找到匹配的异常处理器,Spring Boot 会将异常信息包装成一个默认的 ResponseEntity 对象,并返回给客户端。

在 Spring Boot 应用中,异常处理器是以 Bean 的形式存在的。当我们使用 @ControllerAdvice 注解定义一个异常处理器时,实际上相当于定义了一个 Bean,这个 Bean 中包含了一个或多个 @ExceptionHandler 注解的处理方法。当控制器抛出异常时,Spring Boot 会自动查找与异常类型匹配的异常处理器 Bean,并调用处理方法进行处理。

总结

本文介绍了 @ControllerAdvice 注解的使用和原理。@ControllerAdvice 注解可以用于定义全局异常处理器,它可以处理应用程序中任意一个控制器抛出的异常。当控制器抛出异常时,Spring Boot 会自动调用与异常类型匹配的异常处理器,将异常信息传递给异常处理器,由异常处理器进行处理。异常处理器是以 Bean 的形式存在的,当控制器抛出异常时,Spring Boot 会自动查找与异常类型匹配的异常处理器 Bean,并调用处理方法进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/16162.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库作业2

1.显示所有职工的基本信息。 2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3.求出所有职工的人数。 4.列出最高工资和最低工资。 5.列出职工的平均工资和总工资。 6.创建一个只有职工号&#xff0c;姓名和参加工作的新表&#xff0c;名为工作日期表。 7.显…

使用Electron来给若依系统打包成exe程序,出现登录成功但是不跳转页面(已解决)

阿丹&#xff1a; 之前解决了css找不到文件等问题&#xff0c;那么新问题就来了&#xff01; 问题描述&#xff1a; 进入到登录页面发现问题&#xff1a; 点击登录一直在转圈&#xff0c;但是不进去&#xff01;&#xff01;&#xff01; 更诡异的是&#xff01;后台相应的很…

数据集 VOC转YOLO格式

一、xml转换为txt import os.path import xml.etree.ElementTree as ET import os import random # class_names [palm, stone, scissor, awesome, heartB, OK, ROCK, one, swear, thanks, heartA, # heartC, good, bad, pray, call, take_picture, salute] c…

机器学习——支持向量机(数学基础推导篇【未完】)

在一个周日下午&#xff0c;夏天的雨稀里哗啦地下着 我躺在床上&#xff0c;捧着ipad看支持向量机 睡了好几个觉…支持向量机太好睡了 拉格朗日乘数法太好睡了 几何函数太好睡了 在我看来&#xff0c;支持向量机是目前学下来&#xff0c;最难以理解的内容 希望日后不要太难…脑…

邮票面值-2022年全国青少年信息素养大赛Python国赛第5题

[导读]&#xff1a;超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲&#xff0c;这是超平老师解读Python编程挑战赛真题系列的第7讲。 全国青少年信息素养大赛&#xff08;原全国青少年电子信息智能创新大赛&#xff09;是“世界机器人大会青少年机器人设计…

CopyRE关系抽取

CopyRE 模型包括编码器和解码器两部分 编码器&#xff1a;将输入的句子&#xff08;源句子&#xff09;转换为固定长度的语义向量 解码器&#xff1a;读取该矢量并直接生成三元组 Encoder 编码器使用Bi-RNN对输入句子进行编码。 Decoder 解码器会直接生成三元组。 1、 解码…

Grafana 使用Rest API 作为数据源的实践

本文使用最新版本的Grafana 10 进行操作。 如果要使用Rest API 作为grafana 的数据源&#xff0c;可以选择安装一个Infinity的数据源插件。 如果创建数据源时&#xff0c;搜不到infinity&#xff0c;点击find more 查找安装该数据源插件 1. 安装 Infinity 数据源插件&#xf…

HNU-操作系统OS-学习感悟

初次接触如此底层的计算机基础课程&#xff0c;我还是很不适应的。 教材用的这本书&#xff0c;实验用的清华大学的ucore实验 好在应试水平没有丢。最后总评94/100。 下面仅从应试角度谈一谈学习的理解 总领 HNU的OS课程平时分给的比较模糊&#xff0c;大致由 作业实验验…

自营外卖配送平台的商家如何对接第三方美饿的订单

自营外卖跑腿平台对接第三方美饿的好处 单说美团饿了么自身的流量优势&#xff0c;很多商家不能忽视&#xff0c;但是美团饿了么的高额配送成本与抽成&#xff0c;同样也不能忽视。很多商家希望选择自配送或者其他更划算的配送方式来节省成本。这时&#xff0c;区域性的自建外…

菜比:你还不会接口测试?

很多人会谈论接口测试。到底什么是接口测试&#xff1f;如何进行接口测试&#xff1f;这篇文章会帮到你。 一、前端和后端 在谈论接口测试之前&#xff0c;让我们先明确前端和后端这两个概念。 前端是我们在网页或移动应用程序中看到的页面&#xff0c;它由 HTML 和 CSS 编写…

自制游戏引擎之shader预编译

shader预编译为二进制,在程序运行时候加载,可以提升性能,节省启动时间. 1. 采用google shaderc预编译与加载shader 1.1 下载代码 https://github.com/google/shaderc third_party文件里需要放依赖的第三方 因为电脑访问google的问题,无法通过shaderc-2023.4\utils\git-sync-de…

赛效:如何一键生成印章

1&#xff1a;在电脑上打开标小智印章生成器&#xff0c;点击输入框&#xff0c;在输入框里输入印章内容。 2&#xff1a;文本内容输入后&#xff0c;点击右侧的“生成按钮”。 3&#xff1a;在生成的印章模板里&#xff0c;挑一个满意的&#xff0c;鼠标放上去就可以看到下载按…