詳解如何在SpringBoot項目中使用全局異常處理
在完整的項目開發(fā)中,異常的出現(xiàn)幾乎是無法避免的;如果凡是有可能出現(xiàn)異常的地方,我們都手動的使用try-catch將其捕獲的話,雖然也能達到處理異常的效果,但是這樣做會使得代碼顯得十分臃腫并且后期不好維護,也不利于多人系統(tǒng)開發(fā)。
在Spring Boot中提供了統(tǒng)一處理異常的方法,SpringBoot中有一個ControllerAdvice的注解,使用該注解表示開啟了全局異常的捕獲,我們只需在自定義一個方法使用ExceptionHandler注解然后定義捕獲異常的類型即可對這些捕獲的異常進行統(tǒng)一的處理。接下來就用一個小demo來演示一下全局異常處理的方法。
1. 創(chuàng)建自定義異常
接著上一篇在Spring Boot項目中使用統(tǒng)一返回結果一文中,繼續(xù)添加全局異常處理部分。
NotLoginException.java
@Data @NoArgsConstructor @AllArgsConstructor @ToString public class NotLoginException extends RuntimeException{ private Integer errorCode; private String message; }
2.創(chuàng)建全局異常處理器
定義全局異常處理器,用來捕獲項目中拋出的自定義異常和普通異常,然后按照統(tǒng)一的數(shù)據(jù)格式返回給前端。在項目中不管是返回失敗結果,還是返回成功結果,我們都統(tǒng)一返回數(shù)據(jù)的格式。
MyExceptionHandler.java
@ControllerAdvice public class MyExceptionHandler { /** * 捕獲我們自定義的異常 * @param notLoginException * @return */ @ExceptionHandler(NotLoginException.class) @ResponseBody public Result notLoginExceptionHandler(NotLoginException notLoginException){ return ResultGenerator.genErrorResult(notLoginException.getErrorCode(), notLoginException.getMessage()); } /** * 捕獲其他異常 * @param exception * @return */ @ExceptionHandler(Exception.class) @ResponseBody public Result otherException(Exception exception){ return ResultGenerator.genErrorResult(Constants.RESULT_CODE_SERVER_ERROR, exception.getMessage()); } // 可以定義區(qū)分更細粒度的異常,然后在此處進行捕獲 }
3.創(chuàng)建測試控制器
ExceptionController.java
@Controller public class ExceptionController { @GetMapping("/notLoginException/{id}") @ResponseBody public Result notLoginException(@PathVariable("id") Integer id){ if(id != null && id == 1){ // 拋出一個自定義的異常 throw new NotLoginException(Constants.RESULT_CODE_BAD_REQUEST, "沒有登陸"); // 這里一般會定一個枚舉,定義每一個狀態(tài)碼對應的信息 } return ResultGenerator.genSuccessResult(); } @GetMapping("/exception") @ResponseBody public Result exception(){ int num = 1 / 0; return ResultGenerator.genSuccessResult(); } }
測試自定義異常,先正常給參數(shù),接著給錯誤參數(shù),讓其拋出異常。
測試其他異常。
在Spring Boot項目中全局異常處理的方法大致相同,只需要前期制定好需要處理那些異常,然后定義好枚舉來映射異常信息,采用上述方法統(tǒng)一處理即可。
以上就是詳解如何在SpringBoot項目中使用全局異常處理的詳細內容,更多關于SpringBoot全局異常處理的資料請關注腳本之家其它相關文章!
相關文章
記一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請求異常的解決辦法
Knife4j是一個集Swagger2 和 OpenAPI3為一體的增強解決方案,下面這篇文章主要給大家介紹了關于一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請求異常的解決辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-02-02Spring Security整合KeyCloak保護Rest API實現(xiàn)詳解
這篇文章主要為大家介紹了Spring Security整合KeyCloak保護Rest API實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11將BigDecimal轉成字符串為科學計數(shù)法的踩坑記錄
這篇文章主要介紹了將BigDecimal轉成字符串為科學計數(shù)法的踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06java通過isAccessAllowed方法實現(xiàn)訪問控制
在Web應用開發(fā)中,使用Apache Shiro框架的isAccessAllowed方法可以有效管理用戶的訪問權限,本文詳細解析了該方法的實現(xiàn)過程,包括用戶身份驗證、權限判斷和安全性分析,下面就一起來了解一下2024-09-09