第二十一章:SpringBoot項目中的全局異常處理

全局異常處理不管對于API項目還是普通管理項目都是核心的部分,如果項目中遇到運行時異常捶牢,總不能每個異常處理都去添加try catch邏輯僧须。在SpringBoot項目中跟SpringMVC的全局異常配置是一樣的怕犁,下面我們來為API項目配置全局異常并且返回相同格式的JSON字符串哨苛。

免費專題文章匯總

恒宇少年在博客整理出來了SpringBoot、ApiBoot篮赢、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】齿椅,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題

本章目標

基于SpringBoot項目配置全局異常處理并且返回固定的JSON字符串启泣。

構(gòu)建項目

我們使用IntelliJ IDEA工具創(chuàng)建一個SpringBoot項目涣脚,事先添加依賴:Web、FastJson寥茫、Tomcat等遣蚀,pom.xml配置文件內(nèi)容如下圖1所示:

圖1

全局異常配置只需要添加一個全局的類即可,下面我們來配置全局異常Handler纱耻。

使用@ControllerAdvice

顧名思義芭梯,@ControllerAdvice注解是用來配置控制器通知的,我們可以配置過濾攔截具體一種或者多種類型的注解弄喘,添加annotations屬性即可玖喘,因為我們?nèi)址祷氐亩际荍son格式的字符串,所以需要再類上配置@ResponseBody注解蘑志,該注解熟知SpringMvc的開發(fā)人員都知道就不做過多的解釋了芒涡,RestExceptionHandler全局處理類代碼如下圖2所示:

圖2

我們在上圖2內(nèi)配置了運行時異常的方法處理,@ExceptionHandler注解用來配置需要攔截的異常類型卖漫,默認是全局類型。@ResponseStatus注解用于配置遇到該異常后返回數(shù)據(jù)時的StatusCode的值赠群,我們這里默認使用值500羊始。在類的上方我們配置了@ControllerAdvice的annotations屬性值為RestController.class,也就是只有添加了@RestController注解的控制器才會進入全局異常處理查描,下面我們來添加一個測試控制器突委。

添加測試控制器

我們創(chuàng)建一個名叫做IndexController的控制器柏卤,代碼如下圖3所示:

圖3

可以看到上圖3內(nèi),我們的請求路徑是/index/{number}匀油,這個number就是對應(yīng)int number的值缘缚,我們輸出20/number時,如果number = 0敌蚜,那么就會出現(xiàn)RuntimeException桥滨。在測試代碼之前我們需要添加一個固定返回Json的實體類ApiResult。

統(tǒng)一返回ApiResult實體

我們創(chuàng)建一個名叫ApiResult的實體弛车,代碼如下圖4所示:

圖4

這個只是一個返回對象齐媒,我們將這個類的構(gòu)造函數(shù)私有化了,所以我們在外部不能直接使用new的方式創(chuàng)建對象纷跛,我們提供了一個newInstace方法來實例化ApiResult并獲取對象喻括。下面我們創(chuàng)建一個ApiResultGenerator用來生成ApiResult不同狀態(tài)的返回內(nèi)容(成功、失斊兜臁)唬血。

ApiResultGenerator構(gòu)建者

該類是用來創(chuàng)建成功、失敗返回JSON的工具類唤崭,普通消息方法代碼如下圖5所示:

圖5

上圖5內(nèi)的方法是成功拷恨、失敗共同調(diào)用的方法,成功構(gòu)建ApiResult的方法如下圖6所示:

圖6

失敗構(gòu)建ApiResult的方法如下圖7所示:

圖7

運行測試

我們上面關(guān)于全局的異常處理已經(jīng)配置完成浩姥,下面我們來運行項目測試全局異常是否生效挑随,我們訪問地址:127.0.0.1:8080/index/20,界面輸出的效果如下圖8所示:

圖8

可以看到我們的參數(shù)number = 20時界面可以輸出內(nèi)容勒叠,那我們再來訪問地址:127.0.0.1:8080/index/0兜挨,界面輸出內(nèi)容如下圖9所示:

圖9

上圖9的內(nèi)容是我們格式化ApiResult類后的Json字符串,可以看到給我們返回了錯誤消息以及對應(yīng)的參數(shù)標識眯分,證明我們配置的全局異常已經(jīng)生效拌汇,當我們傳入number = 0時,肯定會出現(xiàn)運行時的被除數(shù)不可以為0的異常弊决,所以SpringBoot內(nèi)置SpringMVC會通過檢查是否配置全局異常來處理視圖的返回內(nèi)容噪舀。

總結(jié)

以上內(nèi)容就是本章的全部講解,本章主要講解了SpringBoot項目如何配置全局異常處理飘诗,適應(yīng)于普通SpringMVC項目以及SpringBoot項目与倡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昆稿,隨后出現(xiàn)的幾起案子纺座,更是在濱河造成了極大的恐慌,老刑警劉巖溉潭,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件净响,死亡現(xiàn)場離奇詭異少欺,居然都是意外死亡,警方通過查閱死者的電腦和手機馋贤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門赞别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人配乓,你說我怎么就攤上這事仿滔。” “怎么了扰付?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵堤撵,是天一觀的道長。 經(jīng)常有香客問我羽莺,道長实昨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任盐固,我火速辦了婚禮荒给,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刁卜。我一直安慰自己志电,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布蛔趴。 她就那樣靜靜地躺著挑辆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝情。 梳的紋絲不亂的頭發(fā)上鱼蝉,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音箫荡,去河邊找鬼魁亦。 笑死,一個胖子當著我的面吹牛羔挡,可吹牛的內(nèi)容都是我干的洁奈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绞灼,長吁一口氣:“原來是場噩夢啊……” “哼利术!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起印叁,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喉钢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡良姆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年肠虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玛追。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡税课,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痊剖,到底是詐尸還是另有隱情韩玩,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布陆馁,位于F島的核電站找颓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叮贩。R本人自食惡果不足惜击狮,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望益老。 院中可真熱鬧彪蓬,春花似錦、人聲如沸捺萌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桃纯。三九已至酷誓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慈参,已是汗流浹背呛牲。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驮配,地道東北人娘扩。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像壮锻,于是被迫代替她去往敵國和親琐旁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理猜绣,服務(wù)發(fā)現(xiàn)灰殴,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,520評論 25 707
  • OAuth是一個關(guān)于授權(quán)的開放網(wǎng)絡(luò)標準掰邢,在全世界得到的廣泛的應(yīng)用牺陶,目前是2.0的版本伟阔。OAuth2在“客戶端”與“...
    恒宇少年閱讀 54,916評論 55 138
  • 年齡從來不是衡量一個人是否成熟的標志,一個人是否成熟來源于他是否了解自己的所作所為的目的掰伸,來源于他是否敢承...
    惰性氫氣閱讀 384評論 0 3
  • 最近買了素描本和鉛筆 臨摹了一副畫 喜歡這樣的生活
    四喬兮閱讀 183評論 0 2