java全局異常處理(springboot)

介紹:

在日常項目開發中,異常是常見的,但是如何更高效的處理好異常信息,讓我們能快速定位到BUG,是很重要的,不僅能夠提高我們的開發效率,還能讓你代碼看上去更舒服,SpringBoot的項目已經對有一定的異常處理了,但是對于我們開發者而言可能就不太合適了,因此我們需要對這些異常進行統一的捕獲并處理。

我們只需在完整的springboot項目中添加四個java類即可

一:異常枚舉類

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注釋 異常返回枚舉類*/
@Getter
@ToString
@AllArgsConstructor
public enum RespBeanEnum {SUCCESS(200,"SUCCESS"),ERROR(500,"服務端異常"),BIND_ERROR(500210,"參數校驗異常"),NULL_ERROR(500211,"找不到數據"),INSERT_ERROR(500212,"數據插入異常-主鍵重復" );private final Integer code;private final String message;}

二:異常返回結果類

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注釋 異常返回類*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespBean {private long code;private String message;private Object obj;/*** 功能描述:返回成功結果* @param* @return*/public static RespBean success(){return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),null);}/*** 功能描述:返回成功結果* @param obj* @return*/public static RespBean success(Object obj){return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),obj);}/*** 功能描述:返回失敗結果* @param respBeanEnum* @return*/public static RespBean error(RespBeanEnum respBeanEnum){return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),null);}/*** 功能描述:返回失敗結果* @param respBeanEnum,obj* @return*/public static RespBean error(RespBeanEnum respBeanEnum,Object obj){return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),obj);}
}

三:全局異常

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注釋 全局異常*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GlobalException extends RuntimeException{private RespBeanEnum respBeanEnum;
}

四:全局異常處理類

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注釋 自定義異常處理類*/
@RestControllerAdvice
public class GlobalExceptionHandler {//調試日志private final Logger logger = LoggerFactory.getLogger(this.getClass());@ExceptionHandler(Exception.class)//處理哪些異常public RespBean ExceptionHandler(Exception e,HttpServletRequest request){//打印日志logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);if(e instanceof GlobalException){//如果是之前自定義的異常GlobalException ex = (GlobalException) e;return RespBean.error(ex.getRespBeanEnum());}else if(e instanceof BindException) { //沒有通過參數校驗注解拋出的異常BindException ce = (BindException) e;RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);respBean.setMessage("參數校驗異常:" + ce.getMessage());return respBean;}else if(e instanceof DuplicateKeyException) { //插入重復數據拋出的異常DuplicateKeyException de = (DuplicateKeyException) e;RespBean respBean = RespBean.error(RespBeanEnum.INSERT_ERROR);respBean.setMessage("參數插入異常:" + de.getMessage());return respBean;}else if(e instanceof  ConstraintViolationException) { //傳入數據有誤拋出的異常ConstraintViolationException de = ( ConstraintViolationException) e;RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);respBean.setMessage("參數校驗異常:" + de.getMessage());return respBean;}return RespBean.error(RespBeanEnum.ERROR);}}

五:使用方法

在使用時,我們可以返回異常結果類或者直接拋出相關異常即可。

//1:返回異常結果
return  RespBean.error(RespBeanEnum.ERROR,"xxxx");
return RespBean.success("xxxx");
//2:拋出異常
throw new BindException("xxxx");

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167836.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言你愛我么?(ZZULIOJ 1205:你愛我么?)

題目描述 LCY買個n束花準備送給她暗戀的女生,但是他不知道這個女生是否喜歡他。這時候一個算命先生告訴他讓他查花瓣數,第一個花瓣表示"愛",第二個花瓣表示"不愛",第三個花瓣表示"愛"..... 為了使最…

某60區塊鏈安全之未初始化的存儲指針實戰二學習記錄

系列文章目錄 文章目錄 系列文章目錄未初始化的存儲指針實戰二實驗目的實驗環境實驗工具實驗原理實驗內容實驗過程EXP利用 未初始化的存儲指針實戰二 實驗目的 學會使用python3的web3模塊 學會分析以太坊智能合約未初始化的存儲指針漏洞 找到合約漏洞進行分析并形成利用 實驗…

機器學習之自監督學習(四)MoCo系列翻譯與總結(二)

MoCo中相關工作的對比分析 去噪自動編碼器(Denoising Autoencoder)是一種用于學習數據表示的神經網絡模型。它的主要目標是通過去除輸入數據中的噪聲,學習到輸入數據的有用表示,從而提高模型對干凈數據的魯棒性。下面是對去噪自動…

Flink 常用物理分區算子(Physical Partitioning)

Flink 物理分區算子(Physical Partitioning) 在Flink中,常見的物理分區策略有:隨機分配(Random)、輪詢分配(Round-Robin)、重縮放(Rescale)和廣播(Broadcast)。 接下來,我們通過源碼和Demo分別了解每種物理分區算子的作用和區別。 (1) 隨機…

win10安裝pytorch(py39)

cuda≤11.6,觀察控制面板 觀察torch對應cuda版本 https://download.pytorch.org/whl/torch/ 安裝cuda11.6.0 CUDA Toolkit Archive | NVIDIA Developer cmd輸入nvcc -V 編輯國內鏡像源 .condarc anaconda prompt輸入 查看環境 conda env list 安裝py3.9…

uniapp視頻倍速播放插件,uniapp視頻試看插件——sunny-video使用文檔

sunny-video視頻倍速播放器 組件名:sunny-video 效果圖 img1img2img3img4 平臺差異說明 目前已應用到APP(安卓、iOS)、微信(小程序、H5)其它平臺未測試 安裝方式 本組件符合easycom規范,HBuilderX 2.5…

emoji

圖標的網址: webfx emojipedia 1.可以直接復制粘貼 2.按照其格式文本表示(Shortcodes) 🚀 😄 🤫 ?? 💀 還有關于通過鏈接引用shield.io中的圖標,沒有深究,不…

第六十三周周報

學習目標: 項目 實驗和論文 學習時間: 2023.11.18-2023.11.24 學習產出: 論文 對論文進行了潤色和修改 實驗 1、上周DiffusionRelative的結果無法再次復現,新跑的FID與以前實驗跑的結果相差不大,上周的結果應…

點大商城V2.5.3分包小程序端+小程序上傳提示限制分包制作教程

這幾天很多播播資源會員反饋點大商城V2.5.3小程序端上傳時提示大小超限,官方默認單個包都不能超過2M,總分包不能超20M。如下圖提示超了93KB,如果出現超的不多情況下可采用手動刪除一些images目錄下不使用的圖片,只要刪除超過100KB…

鴻蒙4.0開發筆記之DevEco Studio如何使用低代碼開發模板進行開發的詳細流程(六)

鴻蒙低代碼開發 一、什么是低代碼二、如何進行鴻蒙低代碼開發1、 創建低代碼開發工程(方式壹)2、已有工程則創建Visual文件(方拾貳) 三、低代碼開發界面介紹四、低代碼實現頁面跳轉五、低代碼開發建議 一、什么是低代碼 所謂低代碼…

Qt+xml解析

文章目錄 一、xml文件介紹1.1 XML 文件結構和基本概念1.2 XML 文件示例二、Qt讀取xml文件2.1 Qt讀取xml 步驟2.2 基本操作和函數 QXmlStreamReader2.3 錯誤處理errorString和hasError2.4 Qt讀取xml實例三、實際項目一、xml文件介紹 1.1 XML 文件結構和基本概念 XML(可擴展標…

三、ts高級筆記,

文章目錄 18、d.ts聲明文件19、Mixin混入20、Decorator裝飾器的使用21、-高級proxy攔截_Reflect元儲存22、-高級寫法Partial-Pick23、Readonly只讀_Record套對象24、高階寫法Infer占位符25、Inter實現提取類型和倒敘遞歸26、object、Object、{}的區別27、localStorage封裝28、協…

基于 STM32F7 和神經網絡的實時人臉特征提取與匹配算法實現

本文討論了如何使用 STM32F7 和神經網絡模型來實現實時人臉特征提取與匹配算法。首先介紹了 STM32F7 的硬件和軟件特點,然后討論了人臉特征提取和匹配算法的基本原理。接下來,我們將重點討論如何在 STM32F7 上實現基于神經網絡的人臉特征提取與匹配算法&…

微機原理_3

一、單項選擇題(本大題共15小題,每小題3分,共45分。在每小題給出的四個備選項中,選出一個正確的答案,請將選定的答案填涂在答題紙的相應位置上。) 在 8086 微機系統中,完成對指令譯碼操作功能的部件是()。 A. EU B. BIU C. SRAM D. DRAM 使計算機執行某…

【機器學習】聚類(一):原型聚類:K-means聚類

文章目錄 一、實驗介紹1. 算法流程2. 算法解釋3. 算法特點4. 應用場景5. 注意事項 二、實驗環境1. 配置虛擬環境2. 庫版本介紹 三、實驗內容0. 導入必要的庫1. Kmeans類a. 構造函數b. 閔可夫斯基距離c. 初始化簇心d. K-means聚類e. 聚類結果可視化 2. 輔助函數3. 主函數a. 命令…

ElasticSearch之虛擬內存

查看當前Linux系統中vm.max_map_count變量的值,命令如下: sysctl vm.max_map_count執行結果的樣例,如下: vm.max_map_count 65530修改參數vm.max_map_count的值,命令如下: sysctl -w vm.max_map_count2…

數組題目: 665. 非遞減數列、453. 最小移動次數使數組元素相等、283. 移動零、189. 旋轉數組、396. 旋轉函數

665. 非遞減數列 題解&#xff1a; 題目要求一個非遞減數列&#xff0c;我們可以考慮需要更改的情況&#xff1a; nums {4, 2, 5} 對于這個nums&#xff0c;由于2的出現導致非遞減&#xff0c;更改的情況就是要么4調到<2&#xff0c;要么2調到4,5. nums {1, 4, 2, 5} …

人工智能-注意力機制之注意力匯聚:Nadaraya-Watson 核回歸

查詢&#xff08;自主提示&#xff09;和鍵&#xff08;非自主提示&#xff09;之間的交互形成了注意力匯聚&#xff1b; 注意力匯聚有選擇地聚合了值&#xff08;感官輸入&#xff09;以生成最終的輸出。 本節將介紹注意力匯聚的更多細節&#xff0c; 以便從宏觀上了解注意力機…

Lubuntu 23.10用戶可使用LXQt 1.4桌面

導讀在眾多 Lubuntu 用戶的要求下&#xff0c;Lubuntu 開發人員決定將 LXQt 1.4 桌面環境向后移植到最新的 Lubuntu 23.10 &#xff08;Mantic Minotaur&#xff09; 版本。 是的&#xff0c;您沒看錯&#xff0c;您現在可以使用官方的 Lubuntu Backports PPA&#xff08;個人軟…

黑馬點評筆記 分布式鎖

文章目錄 分布式鎖基本原理和實現方式對比Redis分布式鎖的實現核心思路實現分布式鎖版本一Redis分布式鎖誤刪情況說明解決Redis分布式鎖誤刪問題分布式鎖的原子性問題分布式鎖-Redission分布式鎖-redission可重入鎖原理分布式鎖-redission鎖重試和WatchDog機制分布式鎖-redissi…