系统中异常公共处理模块 in spring boot
?
?
?
最近在用spring boot 做微服務(wù),所以對于異常信息的 【友好展示】有要求,我設(shè)計(jì)了兩點(diǎn):
一、 在業(yè)務(wù)邏輯代碼中,異常的拋出 我做了限定,一般只會是三種:
1. OmcException //自己寫的異常包裝類 ,主要用來處理業(yè)務(wù)異常 2. IllegalArgumentException //參數(shù)異常類,其實(shí)這個可以不要,只是在我的系統(tǒng)中,我想把參數(shù)異常和業(yè)務(wù)異常做區(qū)分 3. 其他的異常,都按Exception拋 //因?yàn)樗某橄髮哟巫罡?#xff0c;所以在系統(tǒng)中按優(yōu)先級最低進(jìn)行處理,除非必要(如容器級錯誤)否則盡量避免? ? OmcException的構(gòu)造是這樣的:
?
這里留個鉤子:
為什么要在拋異常時,帶上 日志的信息 + 輸入?yún)?shù)的信息?
—— 因?yàn)?#xff0c;我希望在業(yè)務(wù)邏輯代碼中,對于這些異常的處理,最好就是一行代碼,類似于:打印error日志 + 向用戶返回友好的錯誤信息。我想做一個公共的處理模塊。讓業(yè)務(wù)邏輯代碼盡可能的清爽一些。
?
對異常的進(jìn)行try-catch包裝的過程是:
? ??
對異常的拋出做限定,給個總結(jié)就是:盡量包裝成我們自己封裝的異常包裝類。
? ? 為什么呢? 這是在設(shè)計(jì)上做限定,那么后進(jìn)的程序員,如果不按照這個規(guī)范走,功能是做不出來的。這個也是架構(gòu)設(shè)計(jì)的意義,不要隨便動個嘴就好,還要把柵欄建好。
?
二、 在公共的業(yè)務(wù)邏輯處理代碼中,異常的接收(或者說異常的路由)?我做了限定,一般是:
1. 先匹配業(yè)務(wù)異常。業(yè)務(wù)異常一般向用戶提示什么呢? 錯誤編碼 + 錯誤提示信息。
2. 其次,匹配參數(shù)異常,這些參數(shù)異常可能是我們自己做參數(shù)校驗(yàn)拋出來的,也有可能是spring mvc 拋出來的,所以還沒有到我們的業(yè)務(wù)邏輯代碼中。
參數(shù)異常一般提示什么呢? 錯誤提示信息(包含哪個字段出現(xiàn)了錯誤)
3. 根異常Exception,這里捕獲的異常,可能是我們不愿意處理的 數(shù)據(jù)庫異常,也有可能是容器報(bào)的異常(當(dāng)然,這些異常我們并不能捕獲所有的。)這里要做打error日志的處理。
一個設(shè)計(jì)良好的系統(tǒng),最好是不要走進(jìn)這個分支,畢竟分析error日志不是一件多么光榮的事兒。
spring boot中,公共異常處理模塊代碼結(jié)構(gòu)是:
?
然后是,打印error日志 + 向用戶返回友好的錯誤信息
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/haore147/p/6088829.html
總結(jié)
以上是生活随笔為你收集整理的系统中异常公共处理模块 in spring boot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P1736 创意吃鱼法
- 下一篇: InstallSheild 获取系统环境