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