SpringBoot
是為了簡化Spring
應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
實際項目開發中,程序往往會發生各式各樣的異常情況,特別是身為服務端開發人員的我們,總是不停的編寫接口提供給前端調用,分工協作的情況下,避免不了異常的發生,如果直接將錯誤的信息直接暴露給用戶,這樣的體驗可想而知,且對黑客而言,詳細異常信息往往會提供非常大的幫助…
初窺異常
一個簡單的異常請求的接口
1 |
|
打開瀏覽器訪問它的時候發現
又或者是用 postman
等模擬工具
如果這接口是給第三方調用或者是自己公司的系統,看到這種錯誤估計得暴走吧….
笨方法(極其不建議)
采用try-catch
的方式,手動捕獲異常信息,然后返回對應的結果集,相信很多人都看到過類似的代碼(如:封裝成Result對象);該方法雖然間接性的解決錯誤暴露的問題,同樣的弊端也很明顯,增加了大量的代碼量,當異常過多的情況下對應的catch
層愈發的多了起來,很難管理這些業務異常和錯誤碼之間的匹配,所以最好的方法就是通過簡單配置全局掌控….
1 |
|
具體代碼
通過上面的閱讀大家也大致能了解到為啥需要對異常進行全局捕獲了,接下來就看看 Spring Boot
提供的解決方案
導入依賴
在 pom.xml
中添加上 spring-boot-starter-web
的依賴即可
1 |
<dependencies> |
自定義異常
在應用開發過程中,除系統自身的異常外,不同業務場景中用到的異常也不一樣,為了與標題 輕松搞定全局異常
更加的貼切,定義個自己的異常,看看如何捕獲…
1 |
package com.battcn.exception; |
異常信息模板
定義返回的異常信息的格式,這樣異常信息風格更為統一
1 |
package com.battcn.exception; |
控制層
仔細一看是不是和平時正常寫的代碼沒啥區別,不要急,接着看….
1 |
package com.battcn.controller; |
異常處理(關鍵)
注解概述
@ControllerAdvice
捕獲Controller
層拋出的異常,如果添加@ResponseBody
返回信息則為JSON
格式。@RestControllerAdvice
相當於@ControllerAdvice
與@ResponseBody
的結合體。@ExceptionHandler
統一處理一種類的異常,減少代碼重復率,降低復雜度。
創建一個 GlobalExceptionHandler
類,並添加上 @RestControllerAdvice
注解就可以定義出異常通知類了,然后在定義的方法中添加上 @ExceptionHandler
即可實現異常的捕捉…
1 |
package com.battcn.config; |
主函數
1 |
package com.battcn; |
測試
完成准備事項后,啟動Chapter17Application
,通過下面的測試結果可以發現,真的是 so easy
,代碼變得整潔了,擴展性也變好了…
1 |
{"code":400,"message":"num不能為空"} |
1 |
{"code":400,"message":"/ by zero"} |
1 |
result:2 |