前言
在業(yè)務(wù)邏輯中,通常使用兩種方式處理異常:
- 返回錯(cuò)誤碼:優(yōu)點(diǎn)是性能更好,但是不宜維護(hù)。
- 拋出異常:可以使得代碼更清晰,可讀性更好,更符合面向?qū)ο蟆?/li>
選擇哪種需要根據(jù)場(chǎng)景而定,不管如何選擇,只要團(tuán)隊(duì)達(dá)成共識(shí),統(tǒng)一規(guī)范就可以。
下面介紹一下我使用的處理異常的方式。
自定義異常
創(chuàng)建一個(gè)業(yè)務(wù)異常基類 BaseException extends RuntimeException ,為其添加兩個(gè)屬性:code 和 message ,并添加一些常用的構(gòu)造方法。
其中, **code **的作用是儲(chǔ)存錯(cuò)誤碼,在返回前臺(tái)時(shí)將錯(cuò)誤碼返回給用戶。

拋出異常:

錯(cuò)誤碼管理
上面的自定義異??雌饋?lái)很簡(jiǎn)單,但是不夠優(yōu)雅和簡(jiǎn)單。怎么將錯(cuò)誤碼和錯(cuò)誤信息管理起來(lái),是我們接下來(lái)要解決的問(wèn)題。
我使用了 Enum ,先創(chuàng)建一個(gè)接口,其中包含兩個(gè)方法:
- toCode():將枚舉值轉(zhuǎn)為 int 錯(cuò)誤碼,默認(rèn)已實(shí)現(xiàn);
- getMsg():獲取枚舉中的異常信息。

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

觀察上面的錯(cuò)誤碼枚舉類,我們發(fā)現(xiàn),枚舉值為 字母+錯(cuò)誤碼 ,屬性 msg 為錯(cuò)誤信息。
這樣將錯(cuò)誤碼和異常信息統(tǒng)一管理起來(lái)之后,拋出異常的代碼就可優(yōu)化為:

然而這樣依然不夠優(yōu)雅,代碼量比之前還要長(zhǎng)。要是能夠只傳枚舉值一個(gè)參數(shù)就好了,那么我們繼續(xù)優(yōu)化。
創(chuàng)建一個(gè)異常類 BusinessException extends BaseException (創(chuàng)建一個(gè)子類,用來(lái)接收枚舉值),如下:

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

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

以上就是對(duì)異常處理的封裝,使用時(shí),只需要在每個(gè)業(yè)務(wù)模塊中新建一個(gè)異常枚舉類,用來(lái)統(tǒng)一管理異常;需要時(shí),在代碼中拋出 BusinessException 即可。
統(tǒng)一異常處理
最后,我們?cè)偈褂?@ControllerAdvice 和 @ExceptionHandler 注解做一下統(tǒng)一異常處理,它的作用是:
- 將業(yè)務(wù)異常打印到日志中
- 將系統(tǒng)異常封裝為 BaseException 進(jìn)行返回,同樣打印日志;
- 這里也可以做其他操作,比如短信提醒等。
代碼如下:


-
接口
+關(guān)注
關(guān)注
33文章
9441瀏覽量
156076 -
代碼
+關(guān)注
關(guān)注
30文章
4940瀏覽量
73080 -
異常處理
+關(guān)注
關(guān)注
0文章
15瀏覽量
7446 -
儲(chǔ)存
+關(guān)注
關(guān)注
3文章
203瀏覽量
22953
發(fā)布評(píng)論請(qǐng)先 登錄
Linux錯(cuò)誤碼介紹
嵌入式C編程常用的異常錯(cuò)誤處理
掛載sramfs文件系統(tǒng)到外掛sdram ,掛載時(shí)返回錯(cuò)誤碼為-1,怎么解決?
LabVIEW找不到錯(cuò)誤碼,USRP
Linux如何查看系統(tǒng)提供的錯(cuò)誤碼
為什么ucosiii發(fā)送消息會(huì)顯示錯(cuò)誤碼OS_ERR_INT_Q_FULL?
采用CH573做藍(lán)牙主的時(shí)候,連接斷開(kāi)后返回錯(cuò)誤碼怎么處理?
Oracle錯(cuò)誤碼大全
微辰金服新中付POS商戶警惕這五個(gè)錯(cuò)誤碼
Bada系統(tǒng)學(xué)習(xí)-錯(cuò)誤碼(Error Codes)
C++異常機(jī)制解析

異常處理和錯(cuò)誤碼管理
評(píng)論