0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

異常處理和錯誤碼管理

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 14:51 ? 次閱讀

前言

在業(yè)務(wù)邏輯中,通常使用兩種方式處理異常:

  • 返回錯誤碼:優(yōu)點是性能更好,但是不宜維護。
  • 拋出異常:可以使得代碼更清晰,可讀性更好,更符合面向?qū)ο蟆?/li>

選擇哪種需要根據(jù)場景而定,不管如何選擇,只要團隊達成共識,統(tǒng)一規(guī)范就可以。

下面介紹一下我使用的處理異常的方式。

自定義異常

創(chuàng)建一個業(yè)務(wù)異?;?BaseException extends RuntimeException ,為其添加兩個屬性:code 和 message ,并添加一些常用的構(gòu)造方法。

其中, **code **的作用是儲存錯誤碼,在返回前臺時將錯誤碼返回給用戶。

圖片

拋出異常:

圖片

錯誤碼管理

上面的自定義異??雌饋砗芎唵危遣粔騼?yōu)雅和簡單。怎么將錯誤碼和錯誤信息管理起來,是我們接下來要解決的問題。

我使用了 Enum ,先創(chuàng)建一個接口,其中包含兩個方法:

  • toCode():將枚舉值轉(zhuǎn)為 int 錯誤碼,默認已實現(xiàn);
  • getMsg():獲取枚舉中的異常信息。

圖片

下面創(chuàng)建一個枚舉類,實現(xiàn)上面的接口:

圖片

觀察上面的錯誤碼枚舉類,我們發(fā)現(xiàn),枚舉值為 字母+錯誤碼 ,屬性 msg 為錯誤信息。

這樣將錯誤碼異常信息統(tǒng)一管理起來之后,拋出異常的代碼就可優(yōu)化為:

圖片

然而這樣依然不夠優(yōu)雅,代碼量比之前還要長。要是能夠只傳枚舉值一個參數(shù)就好了,那么我們繼續(xù)優(yōu)化。

創(chuàng)建一個異常類 BusinessException extends BaseException (創(chuàng)建一個子類,用來接收枚舉值),如下:

圖片

這樣我們就可以優(yōu)雅的拋出 BusinessException 了:

圖片

如果想要保留原異常信息,還可以使用:

圖片

以上就是對異常處理的封裝,使用時,只需要在每個業(yè)務(wù)模塊中新建一個異常枚舉類,用來統(tǒng)一管理異常;需要時,在代碼中拋出 BusinessException 即可。

統(tǒng)一異常處理

最后,我們再使用 @ControllerAdvice 和 @ExceptionHandler 注解做一下統(tǒng)一異常處理,它的作用是:

  • 業(yè)務(wù)異常打印到日志中
  • 系統(tǒng)異常封裝為 BaseException 進行返回,同樣打印日志;
  • 這里也可以做其他操作,比如短信提醒等。

代碼如下:

圖片

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8355

    瀏覽量

    150510
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68075
  • 異常處理
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7264
  • 儲存
    +關(guān)注

    關(guān)注

    3

    文章

    197

    瀏覽量

    22332
收藏 人收藏

    評論

    相關(guān)推薦

    Linux錯誤碼介紹

    處理一些程序出錯語句中,不管是用戶空間還是內(nèi)核空間,通常都會返回一個錯誤碼。例如`return -ERROR`。
    發(fā)表于 06-27 15:48 ?1984次閱讀
    Linux<b class='flag-5'>錯誤碼</b>介紹

    嵌入式C編程常用的異常錯誤處理

    嵌入式C編程中,異常錯誤處理是確保系統(tǒng)穩(wěn)定性和可靠性的重要部分。以下是一些常見的異常錯誤處理方法及其詳細說明和示例: 1. 斷言 (Assertions) 斷言用于在開發(fā)階段捕獲程
    發(fā)表于 08-06 14:32

    LabVIEW找不到錯誤碼,USRP

    用LabVIEW操作NI USRP出現(xiàn)錯誤:The specified session handle is invalid or does not correspond to an active session.并且查不到該錯誤碼-1074118640,求大神指教
    發(fā)表于 04-14 16:50

    最近做有限采樣時總是出現(xiàn)“嘗試讀取的采樣超出最終采集的采樣”的錯誤,錯誤碼-200278

    最近做有限采樣時總是出現(xiàn)“嘗試讀取的采樣超出最終采集的采樣”的錯誤錯誤碼-200278,如下圖有哪位大神給指點一下吧
    發(fā)表于 11-16 21:54

    請問Vxworks remove 返回值 錯誤碼 errno為0xb83dd0 表示什么意思?

    請問Vxworks remove 返回值 錯誤碼 errno為0xb83dd0 表示什么意思?
    發(fā)表于 07-02 08:19

    Linux如何查看系統(tǒng)提供的錯誤碼

    在用Linux下寫C的代碼的時候,利用open、create函數(shù)總是會出現(xiàn)錯誤但是返回值為 -1 ,并不能定位錯誤在哪里,所以查看系統(tǒng)提供的錯誤碼就顯得特別有必要了需要包含頭文件并且定義一個 extern int errno 之
    發(fā)表于 07-05 07:31

    為什么ucosiii發(fā)送消息會顯示錯誤碼OS_ERR_INT_Q_FULL?

    ;TASK, P, 2, OS_OPT_POST_FIFO, &ERR); }}free(p);第一個可以發(fā)送出去消息,第二個就有錯誤,錯誤碼是OS_ERR_INT_Q_FULL;malloc
    發(fā)表于 10-08 06:47

    藍牙低功耗BLE常見的幾種斷開錯誤碼和原因分析

    低功耗藍牙BLE常見的斷開錯誤碼有哪些呢?低功耗藍牙BLE常見的斷開原因有哪些呢?
    發(fā)表于 12-29 07:52

    采用CH573做藍牙主的時候,連接斷開后返回錯誤碼怎么處理?

    連接斷開后返回的錯誤碼代表上面意識,從那個手冊可以看到,Disconnected...Reason:8
    發(fā)表于 07-28 07:26

    我運行程序遇到一個問題“error code is : 2”,在哪里可以查看各種錯誤碼對應(yīng)的信息?

    我運行程序遇到一個問題“error code is : 2”,在哪里可以查看各種錯誤碼對應(yīng)的信息
    發(fā)表于 09-18 06:17

    Oracle錯誤碼大全

    Oracle錯誤碼大全 ORA-00000 normal, successful completion Cause An operation has completed normally
    發(fā)表于 12-26 13:44 ?55次下載

    微辰金服新中付POS商戶警惕這五個錯誤碼

      POS機一旦提示錯誤碼怎么辦?微辰金服新中付POS商戶警惕這五個錯誤碼?! ?、持卡人信用卡被刷拒付  2、因套碼導(dǎo)致信用卡消費賬單與實際消費地不同引發(fā)  3、轉(zhuǎn)賬業(yè)務(wù)刷拒付  4、同行競爭惡意
    發(fā)表于 03-29 16:06 ?393次閱讀

    Bada系統(tǒng)學(xué)習(xí)-錯誤碼(Error Codes)

    錯誤碼是指在安裝或者加載bada應(yīng)用時發(fā)生錯誤時顯示的編碼.每個錯誤都有對應(yīng)的錯誤碼.這個編碼是用于檢查這個錯誤的原因.下圖
    發(fā)表于 04-02 14:35 ?503次閱讀

    C++異常機制解析

    傳統(tǒng)排錯 我們早在 C 程序里面?zhèn)鹘y(tǒng)的錯誤處理手段有: 終止程序,如 assert;缺陷是用戶難以接受,說白了就是一種及其粗暴的手法,比如發(fā)生內(nèi)存錯誤,除0錯誤時就會終止程序。 返回錯誤碼
    的頭像 發(fā)表于 11-09 14:16 ?349次閱讀
    C++<b class='flag-5'>異常</b>機制解析

    一站式統(tǒng)一返回值封裝、異常處理、異常錯誤碼解決方案—最強的Sping Boot接口優(yōu)雅響應(yīng)處理

    1. 前言 統(tǒng)一返回值封裝、統(tǒng)一異常處理異常錯誤碼體系的意義在于提高代碼的可維護性和可讀性,使得代碼更加健壯和穩(wěn)定。統(tǒng)一返回值封裝可以避免每一個接口都需要手工拼裝響應(yīng)報文;統(tǒng)一
    的頭像 發(fā)表于 06-20 15:42 ?407次閱讀