Springboot全局異常捕獲及try catch區(qū)別解析
今天在碼代碼的時(shí)候突然想到這個(gè)問題,覺得有點(diǎn)困惑。在網(wǎng)上也翻閱不少帖子其中有一個(gè)帖子給了我一個(gè)思路,其實(shí)也是解釋了基礎(chǔ)概念。
概念一:try catch 語句在try里面捕獲到異常之后會(huì)進(jìn)入catch子句內(nèi),執(zhí)行catch內(nèi)的代碼。
概念二:springboot中的全局異常處理在捕獲到異常之后,異常代碼之后的語句是不會(huì)再運(yùn)行了的
那么從我一開始思路理解開始,這個(gè)時(shí)候我覺得這2個(gè)的功能用處都是在代碼出現(xiàn)異常情況的時(shí)候?qū)ζ溥M(jìn)行處理,且向調(diào)用者(或者就是用戶)返回一個(gè)友好的提示,那這2個(gè)有啥區(qū)別呢,重點(diǎn)來了……
業(yè)務(wù)場景一:某個(gè)字段必須保證唯一,例如:不允許存在同一個(gè)name的數(shù)據(jù),這是大家開發(fā)過程中很常見的了,調(diào)用新增接口的時(shí)候你需要先查一遍該數(shù)據(jù)在庫里是否存在,如果存在就返回“該數(shù)據(jù)已存在”,并且不再執(zhí)行后面的插入動(dòng)作。到此時(shí)我個(gè)人覺得try catch 和全局異常處理達(dá)到的效果是一樣的。
業(yè)務(wù)場景二:某個(gè)字段是需要提示用戶“該數(shù)據(jù)已存在”,但是但是但是……我也允許你新增一個(gè)同樣的數(shù)據(jù),我就只是單純要提示一下你而已,并不阻止你繼續(xù)插入這條數(shù)據(jù)。這個(gè)時(shí)候有木有突然覺得就不一樣了,如果是全局異常處理的話,提示你“該數(shù)據(jù)已存在”之后就不運(yùn)行后面的插入代碼了,而try catch是可以在拋出異常信息“該數(shù)據(jù)已存在”的時(shí)候進(jìn)入catch代碼塊執(zhí)行插入操作的。
就是不要認(rèn)為在有全局異常處理之后,try catch就沒用了。不知道我這樣算不算牽強(qiáng)的解釋
圖一(使用只全局異常的情況下,無法執(zhí)行到else子句內(nèi)的insert操作)
圖二(在拋出異常之后,進(jìn)入catch子句仍然執(zhí)行insert動(dòng)作)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明3. CSS hack用法案例詳解4. PHP設(shè)計(jì)模式中工廠模式深入詳解5. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)6. ASP+ajax實(shí)現(xiàn)頂一下、踩一下同支持與反對的實(shí)現(xiàn)代碼7. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法8. ThinkPHP5實(shí)現(xiàn)JWT Token認(rèn)證的過程(親測可用)9. asp中response.write("中文")或者js中文亂碼問題10. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析
