系統中異常公共處理模塊 in spring boot


 

 

 

最近在用spring boot 做微服務,所以對於異常信息的 【友好展示】有要求,我設計了兩點:

一、 在業務邏輯代碼中,異常的拋出 我做了限定,一般只會是三種:           

1. OmcException                        //自己寫的異常包裝類 ,主要用來處理業務異常
2. IllegalArgumentException            //參數異常類,其實這個可以不要,只是在我的系統中,我想把參數異常和業務異常做區分
3. 其他的異常,都按Exception拋            //因為它的抽象層次最高,所以在系統中按優先級最低進行處理,除非必要(如容器級錯誤)否則盡量避免

    OmcException的構造是這樣的:

  

 

這里留個鈎子:

為什么要在拋異常時,帶上 日志的信息 + 輸入參數的信息?

       —— 因為,我希望在業務邏輯代碼中,對於這些異常的處理,最好就是一行代碼,類似於:打印error日志 + 向用戶返回友好的錯誤信息。我想做一個公共的處理模塊。讓業務邏輯代碼盡可能的清爽一些。

 

對異常的進行try-catch包裝的過程是:

    

對異常的拋出做限定,給個總結就是:盡量包裝成我們自己封裝的異常包裝類。

    為什么呢? 這是在設計上做限定,那么后進的程序員,如果不按照這個規范走,功能是做不出來的。這個也是架構設計的意義,不要隨便動個嘴就好,還要把柵欄建好。

 

二、 在公共的業務邏輯處理代碼中,異常的接收(或者說異常的路由) 我做了限定,一般是:

1. 先匹配業務異常。業務異常一般向用戶提示什么呢? 錯誤編碼 + 錯誤提示信息。

2. 其次,匹配參數異常,這些參數異常可能是我們自己做參數校驗拋出來的,也有可能是spring mvc 拋出來的,所以還沒有到我們的業務邏輯代碼中。

  參數異常一般提示什么呢? 錯誤提示信息(包含哪個字段出現了錯誤)

3. 根異常Exception,這里捕獲的異常,可能是我們不願意處理的 數據庫異常,也有可能是容器報的異常(當然,這些異常我們並不能捕獲所有的。)這里要做打error日志的處理。

  一個設計良好的系統,最好是不要走進這個分支,畢竟分析error日志不是一件多么光榮的事兒。

spring boot中,公共異常處理模塊代碼結構是:

 

然后是,打印error日志 + 向用戶返回友好的錯誤信息

 

 

 

 

 

 

 

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM