全局异常处理器简单使用

一、为什么需要全局异常处理器?

  1. 统一异常处理:在应用程序中,可能会出现各种各样的异常情况,如数据库连接失败、资源不存在、权限问题等等。全局异常处理器允许我们统一处理这些异常,而不是在每个地方都去处理它们,会省去大部分try-catch代码。

  2. 提高可维护性:通过集中处理异常,可以使代码更加清晰易懂,减少重复的异常处理代码。

  3. 友好的用户体验:通过全局异常处理器,我们可以提供友好的错误信息给用户,而不是让他们看到一堆堆栈跟踪信息。

二、如何使用全局异常处理器?

在 Spring Boot 中,使用全局异常处理器非常简单。主要步骤如下:

  1. 使用 @ControllerAdvice 注解标记一个类。

  2. 在类中定义异常处理方法,并使用 @ExceptionHandler 注解标记这些方法,指定要处理的异常类型。

  3. 在异常处理方法中编写处理异常的逻辑,可以返回自定义的错误信息。

三、示例应用案例

假设我们正在开发一个电子商务网站,其中有一个商品详情页,用户可以通过访问 /product/{productId} 来查看商品详情。如果用户访问的商品不存在,我们希望能够给用户友好的错误提示。

首先,我们创建一个全局异常处理器类 GlobalExceptionHandler

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(ProductNotFoundException.class)public ResponseEntity<String> handleProductNotFoundException(ProductNotFoundException ex) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body("商品不存在,请检查您输入的商品ID");}
}

在上面的代码中,我们使用 @ControllerAdvice 注解标记了 GlobalExceptionHandler 类,表明它是一个全局异常处理器。然后,我们定义了一个方法 handleProductNotFoundException,并使用 @ExceptionHandler 注解标记这个方法,指定它处理 ProductNotFoundException 这种异常。在方法中,我们返回了一个包含友好错误信息的 ResponseEntity 对象。

然后,我们定义一个 ProductNotFoundException 异常类:

public class ProductNotFoundException extends RuntimeException {// 可以根据需要添加一些自定义的异常信息或其他属性
}

最后,在我们的 Controller 类中,当用户请求一个不存在的商品时抛出 ProductNotFoundException 异常:

@RestController
public class ProductController {@Autowiredprivate ProductService productService;@GetMapping("/product/{productId}")public Product getProductById(@PathVariable Long productId) {Product product = productService.getProductById(productId);if (product == null) {throw new ProductNotFoundException();}return product;}
}

现在,当用户访问一个不存在的商品时,全局异常处理器会捕获到 ProductNotFoundException 异常,并返回一个包含友好错误信息的响应,让用户知道该商品不存在。

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

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

相关文章

一、Java安装JDK8

Java安装JDK8 一、Centos7.91.命令行安装2.安装包安装2.1 下载2.2 安装2.3 配置java环境 二、Windows1.下载2.安装3.配置环境变量 一、Centos7.9 1.命令行安装 yum install java-1.8.0-openjdk.x86_642.安装包安装 2.1 下载 下载地址&#xff1a;https://www.oracle.com/cn…

基于T1w/T2w 比值揭示髓磷脂相关变化

前言&#xff1a; 最近在阅读文献的时候发现2篇文章&#xff0c;是采用T1w/T2w 比值表征髓磷脂&#xff0c;有点感兴趣&#xff0c;因此尝试了一下文献所提出的方法。&#xff08;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9247578/ https://www.ncbi.nlm.nih.gov/pmc/ar…

鸿蒙开发系列教程(二十四)--List 列表操作(3)

列表编辑 1、新增列表项 定义列表项数据结构和初始化列表数据&#xff0c;构建列表整体布局和列表项。 提供新增列表项入口&#xff0c;即给新增按钮添加点击事件。 响应用户确定新增事件&#xff0c;更新列表数据。 2、删除列表项 列表的删除功能一般进入编辑模式后才可…

【C语言】Linux 内核listen系统调用代码

一、Linux 4.19内核listen系统调用代码注释 /** 开始对一个 socket 进行监听。这个函数做一些准备工作以便 socket 可以开始监听&#xff0c;* 如果操作成功&#xff0c;则将 socket 标记为准备好监听的状态。*/int __sys_listen(int fd, int backlog) {struct socket *sock…

VueCLI核心知识4:动画效果、过渡效果

1 动画效果 【代码】 <template><div><button click"isShow !isShow">显示/隐藏</button><!-- <transition name"xxx" :appear"true"> 可以指定name属性&#xff0c;也可以不指定&#xff0c;name属性在有…

Codeforces Round 926 (Div. 2)

这场比赛我觉得题目不是特别难&#xff0c;就是有点难读懂&#xff0c;基本上读懂就差不多会做了。 Problem - A - Codeforces 1.思路&#xff1a; Q1&#xff1a;首先这个题我们一定能确定一个下界答案就是最大值减去最小值&#xff0c;那么我们怎样证明下界答案就是上界答案…

数值类型的运算方式总结

提纲1&#xff1a;常见的位运算使用场景 提纲2&#xff1a;整数类型运算时的类型溢出问题&#xff0c;产生原因以及解决办法 提纲3&#xff1a;浮点类型运算时的精度丢失问题&#xff0c;产生原因以及解决办法 数值类型&#xff08;6种&#xff09;分为&#xff1a; 整型&…

六、Datax通过json字符串运行

Datax通过json字符串运行 一、场景二、代码实现 一、场景 制作一个web应用&#xff0c;在页面上配置一个json字符串&#xff0c;保存在数据库里面。在执行json的时候&#xff0c;动态在本地创建一个json文件后执行&#xff0c;并识别是否成功&#xff0c;将执行过程保存在数据…

[运行报错] Maven打包SpringBoot项目,运行报错:no main manifest attribute, in xxx.jar

文章目录 问题描述解决办法附录 问题描述 IDEA创建SpringBoot 2.6.13项目&#xff08;仅引入SpringMVC依赖&#xff09;&#xff0c;对生成的代码不做修改直接Maven打包。但运行报错&#xff1a; # java -jar xxx.jar no main manifest attribute, in xxx.jar检查jar包&…

C++数据结构与算法——字符串

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

2024年【危险化学品经营单位安全管理人员】免费试题及危险化学品经营单位安全管理人员考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员免费试题参考答案及危险化学品经营单位安全管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品经营单位安全管理人员操作证已考过的学员汇总&#xff0c;相对有效帮助…

WordPress作者页面链接的用户名自动变成16位字符串串插件Smart User Slug Hider

WordPress默认的作者页面URL链接地址格式为“你的域名/author/admin”&#xff0c;其中admin就是你的用户名&#xff0c;这样的话就会暴露我们的用户名。 为了解决这个问题&#xff0c;前面boke112百科跟大家分享了『如何将WordPress作者存档链接中的用户名改为昵称或ID』一文…

Linux进程间通信(二)-----system V共享内存

共享内存的概念 共享内存让不同进程看到同一份资源的方式就是&#xff0c;在物理内存当中申请一块内存空间&#xff0c;然后将这块内存空间分别与各个进程各自的页表之间建立映射&#xff0c;再在虚拟地址空间当中开辟空间并将虚拟地址填充到各自页表的对应位置&#xff0c;使得…

书生浦语大模型实战营-课程作业(3)

下载sentence_transformer的代码运行情况。sentence_transformer用于embedding&#xff08;转向量&#xff09; 本地构建持久化向量数据库。就是把txt和md文件抽取出纯文本&#xff0c;分割成定长&#xff08;500&#xff09;后转换成向量&#xff0c;保存到本地&#xff0c;称…

Python算法题集_二叉树的层序遍历

Python算法题集_二叉树的层序遍历 题102&#xff1a;二叉树的层序遍历1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【DFS递归】2) 改进版一【BFS迭代】3) 改进版二【BFS迭代循环】 4. 最优算法 本文为Python算法题集之一的代码示例 题102&am…

python 人脸检测器

import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…

C++虚函数

C虚函数 在C中&#xff0c;虚函数&#xff08;Virtual Function&#xff09;是一个使用关键字virtual声明的成员函数&#xff0c;它在基类中被声明&#xff0c;以便在任何派生类中被重写&#xff08;Override&#xff09;。使用虚函数的目的是实现多态性——一种允许使用基类指…

C#(C Sharp)学习笔记_编程练习题 _输出奇偶数, 九九乘法表, 猜数字游戏【八】

1. 输出奇偶数 要求&#xff1a;输出从1到100的所有偶数 分析&#xff1a; 首先我们需要用到循环&#xff08;while也好&#xff0c;for也好&#xff0c;但for会更加优雅&#xff09;&#xff0c;输出0到100的所以数。在for的循环体内写入if条件判断语句&#xff0c;条件表达…

数据密集型应用系统设计

数据密集型应用系统设计 原文完整版PDF&#xff1a;https://pan.quark.cn/s/d5a34151fee9 这本书的作者是少有的从工业界干到学术界的牛人&#xff0c;知识面广得惊人&#xff0c;也善于举一反三&#xff0c;知识之间互相关联&#xff0c;比如有个地方把读路径比作programming …

ESP32学习(4)——电脑远程控制LED灯

1.思路梳理 首先需要让ESP32连接上WIFI 然后创建udp socket 接着接收udp数据 最后解析数据&#xff0c;控制LED 2.代码实现 import network from socket import * from machine import Pin p2Pin(2,Pin.OUT)def do_connect(): #连接wifi wlan network.WLAN(network.STA_IF)…