【Spring Boot】统一异常处理

目录

  • 统一异常处理
    • 一. 概念
    • 二. 全局异常处理
    • 三. 处理特定异常

统一异常处理

一. 概念

其实统一异常是运用了AOP(对某一类事情的集中处理)的思维,简单概括就是在我们进行前后端数据交互的时候,抛出的任何的异常都能够自动捕获然后抛出,不用程序员在敲代码时格外关注try catch语句。

其实统一异常处理非常简单,在实现时要加入类注解@ControllerAdvice(这是一个表示控制通知的注解,在接下来的统一异常处理也要运用到),并且有一点与统一数据返回不同的是,统一异常处理需要加上类注解@ResponseBody来确认返回的数据类型,然后在类中要进行捕获异常的方法上加上注解@ExceptionHandle即可。

二. 全局异常处理

处理全局异常代码如下:

import com.example.demo.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
@ResponseBodypublic class ErrorAdvice {/*** 全局异常处理*/@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}}

这样程序抛出异常的时候,就会被该异常处理方法所捕获,并且返回统一异常处理的结果(JSON格式)!

三. 处理特定异常

处理特定异常代码如下:

import com.example.demo.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ResponseBody
@ControllerAdvicepublic class ErrorAdvice {@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}@ExceptionHandlerpublic Object handler(NullPointerException e) {return Result.fail("发⽣NullPointerException:"+e.getMessage());}@ExceptionHandlerpublic Object handler(ArithmeticException e) {return Result.fail("发⽣ArithmeticException:"+e.getMessage());}}

当有多个异常通知时,匹配顺序为当前类及其⼦类向上依次匹配

进行统一异常处理的目的就是在异常发生时,尽可能地减少破坏,妥善处理,而不去影响其他部分程序的运行

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

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

相关文章

uniapp微信接口回调 response.sendRedirect nginx 报404错误

如题 参考 uniapp打包H5时,访问index.html页面白屏报错net::ERR_ABORTED 404 - 简书 nginx中修改 配置文件 location / { try_files $uri $uri/ /index.html; root html; index index.html index.htm; } uniapp里配置 重新载入

JavaScript常用包管理工具

NPM、Yarn、CNPM 和 PNPM 是 JavaScript 生态系统中常用的包管理工具。它们各自有不同的特点和优势。以下是对它们的详细解释: 1. NPM (Node Package Manager) 简介: NPM 是 Node.js 的默认包管理工具,也是最早出现的 JavaScript 包管理工具…

ingress-nginx控制器证书不会自动更新问题

好久没更新了,正好今天遇到了一个很有意思的问题,在这里给大家分享下,同时也做下记录。 背景 最近想做个实验,当k8s集群中secret更新后,ingress-nginx控制器会不会自动加载新的证书。我用通义千问搜了下,…

什么是FPGA的基本组成单元?

FPGA(Field-Programmable Gate Array)的基本组成单元是其内部结构的关键组件,这些单元可以被编程来执行各种数字逻辑功能。FPGA的基本组成单元主要包括以下几个部分: 可编程逻辑块 (CLB, Configurable Logic Block) CLB是FPGA中最…

Airflow: 大数据调度工具详解

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

【CH32V305FBP6】移植 RT-Thread

文章目录 前言实现修改链接文件移植 RTT 代码修改启动文件修改中断文件修改主文件 前言 移植 RT-Thread 到 CH32V305FBP6。 实现 修改链接文件 .text :{. ALIGN(4);*(.text)*(.text.*)*(.rodata)*(.rodata*)*(.gnu.linkonce.t.*)/* section information for finsh shell */…

Go单元测试

Go 语言中,单元测试是通过标准库中的 testing 包来实现的,该包提供了一组功能,使得编写、运行和管理单元测试变得简单和高效。 一、规则 测试文件的命名规则 Go 中的测试文件命名规则是在被测试的源文件名后面加上 _test.go。例如&#xff0…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本,因为新版本可能出现与python不匹配问题。 我选择3.6.3版本,因为我安装的python是3.8,可以匹配版本。同时window操…

Linux文件描述符与FILE指针互相转换

目录 1、文件描述符转换为 FILE 指针 2、FILE 指针转换为文件描述符 在Linux中,文件描述符(file descriptor, fd)和FILE指针(也称为文件流指针,FILE pointer)是两种常见的文件操作接口。文件描述符是一个…

Cesium与Three相机同步(3)

Cesium与Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…

C++ 类和对象 构造函数

一 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 例&#xff1a; #include <iostream> class Empty {// 空类&#xff0c;什么成员都没有 }; 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&a…

洛谷 P1035 [NOIP2002 普及组] 级数求和

本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修改本段文字。 违者必究&#xff0c;谢谢配合。 个人主页&#xff1a;blog.csdn.net/jzw…

qt 读取配置文件

在Qt中读取配置文件&#xff0c;主要有以下几种方法&#xff1a; 使用QFile和QTextStream类&#xff1a; 这种方法适用于读取任意文本文件&#xff0c;包括配置文件。使用QFile的open()方法打开配置文件。使用QTextStream的readLine()方法逐行读取配置数据。使用QXmlStreamRea…

谷粒商城学习-笔记大全

1&#xff0c;谷粒商城-01-项目介绍 2&#xff0c;谷粒商城笔记-02-项目整体效果展示 3&#xff0c;谷粒商城笔记-03-分布式基础概念 4&#xff0c;谷粒商城笔记-04-项目微服务架构图简介 5&#xff0c;谷粒商城学习笔记-05-项目微服务划分图 6&#xff0c;谷粒商城学习-06-使用…

【LinuxC语言】手撕Http协议之accept_request函数实现(一)

文章目录 前言accept_request函数作用accept_request实现解析方法根据不同方法进行不同操作http服务器响应格式unimplemented函数实现总结前言 在计算机网络中,HTTP协议是一种常见的应用层协议,它定义了客户端和服务器之间如何进行数据交换。在这篇文章中,我们将深入探讨Li…

C++模块化之内部类

目录 1.引言 2.内部类的访问控制 3.优缺点分析 4.实际运用 4.1.实现复杂数据结构 4.2.封装细节实现 4.3.事件处理和回调 4.4.模板元编程辅助类 4.5. 访问控制和封装 4.6. 代码组织和模块化 5.总结 1.引言 在C中&#xff0c;内部类&#xff08;Nested Class&#xff…

力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和)

力扣爆刷第159天之TOP100五连刷61-65&#xff08;翻转单词、对称二叉树、遍历求和&#xff09; 文章目录 力扣爆刷第159天之TOP100五连刷61-65&#xff08;翻转单词、对称二叉树、遍历求和&#xff09;一、151. 反转字符串中的单词二、129. 求根节点到叶节点数字之和三、104. 二…

简单解读伦敦银CFD(XAG)走势图

从本质上说&#xff0c;伦敦银是一种差价合约&#xff08;CFD&#xff09;交易&#xff0c;在同平台所提供的MT4中&#xff0c;它的代码也许并不一样&#xff0c;有的平台会显示为XAG&#xff0c;有的平台会显示为LLS或Silver&#xff0c;但它们指的其实是同一个品种&#xff0…

Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…

基于单片机的防酒驾控制系统设计

摘 要&#xff1a; 酒后驾车的危害十分巨大&#xff0c;因此&#xff0c;笔者介绍了一种基于单片机的防酒驾控制系统。系统由酒精传感器 MQ-3测量汽车驾驶员体内的酒精含量浓度&#xff0c;通过 A/D 转换器转换成数字信号传给单片机&#xff0c;经过单片机处理后显示酒精浓度&a…