詳解如何在SpringBoot項(xiàng)目中使用全局異常處理
在完整的項(xiàng)目開(kāi)發(fā)中,異常的出現(xiàn)幾乎是無(wú)法避免的;如果凡是有可能出現(xiàn)異常的地方,我們都手動(dòng)的使用try-catch將其捕獲的話,雖然也能達(dá)到處理異常的效果,但是這樣做會(huì)使得代碼顯得十分臃腫并且后期不好維護(hù),也不利于多人系統(tǒng)開(kāi)發(fā)。
在Spring Boot中提供了統(tǒng)一處理異常的方法,SpringBoot中有一個(gè)ControllerAdvice的注解,使用該注解表示開(kāi)啟了全局異常的捕獲,我們只需在自定義一個(gè)方法使用ExceptionHandler注解然后定義捕獲異常的類(lèi)型即可對(duì)這些捕獲的異常進(jìn)行統(tǒng)一的處理。接下來(lái)就用一個(gè)小demo來(lái)演示一下全局異常處理的方法。
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)建全局異常處理器
定義全局異常處理器,用來(lái)捕獲項(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)建測(cè)試控制器
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, "沒(méi)有登陸"); // 這里一般會(huì)定一個(gè)枚舉,定義每一個(gè)狀態(tài)碼對(duì)應(yīng)的信息
}
return ResultGenerator.genSuccessResult();
}
@GetMapping("/exception")
@ResponseBody
public Result exception(){
int num = 1 / 0;
return ResultGenerator.genSuccessResult();
}
}測(cè)試自定義異常,先正常給參數(shù),接著給錯(cuò)誤參數(shù),讓其拋出異常。


測(cè)試其他異常。

在Spring Boot項(xiàng)目中全局異常處理的方法大致相同,只需要前期制定好需要處理那些異常,然后定義好枚舉來(lái)映射異常信息,采用上述方法統(tǒng)一處理即可。
以上就是詳解如何在SpringBoot項(xiàng)目中使用全局異常處理的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot全局異常處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot整合Web開(kāi)發(fā)之文件上傳與@ControllerAdvice
- SpringBoot @ControllerAdvice 攔截異常并統(tǒng)一處理
- SpringBoot異常處理器的使用與添加員工功能實(shí)現(xiàn)流程介紹
- SpringBoot異常處理之異常顯示的頁(yè)面問(wèn)題
- SpringBoot優(yōu)雅地實(shí)現(xiàn)全局異常處理的方法詳解
- Springboot項(xiàng)目異常處理及返回結(jié)果統(tǒng)一
- SpringBoot @ExceptionHandler與@ControllerAdvice異常處理詳解
相關(guān)文章
Java實(shí)現(xiàn)FIFO功能的完整代碼實(shí)踐
在軟件開(kāi)發(fā)中,隊(duì)列(Queue)是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),其特點(diǎn)是先進(jìn)先出(FIFO,First In First Out),FIFO 隊(duì)列在生產(chǎn)者-消費(fèi)者模型、任務(wù)調(diào)度、緩沖區(qū)管理等場(chǎng)景中具有廣泛的應(yīng)用,本文給大家介紹了Java實(shí)現(xiàn)FIFO功能的完整代碼實(shí)踐,需要的朋友可以參考下2025-03-03
新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法
這篇文章主要介紹了新版IDEA使用Spring Initializr創(chuàng)建工程(兩種方法,官方工具和IDEA),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-10-10
在SpringBoot框架中實(shí)現(xiàn)打印響應(yīng)的日志
這篇文章主要介紹了在SpringBoot框架中實(shí)現(xiàn)打印響應(yīng)的日志,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
使用springboot跳轉(zhuǎn)到指定頁(yè)面和(重定向,請(qǐng)求轉(zhuǎn)發(fā)的實(shí)例)
這篇文章主要介紹了使用springboot跳轉(zhuǎn)到指定頁(yè)面和(重定向,請(qǐng)求轉(zhuǎn)發(fā)的實(shí)例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java try catch finally異常處理組合詳解
這篇文章主要介紹了Java try catch finally異常處理組合詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

