springboot全局異常處理代碼實(shí)例
這篇文章主要介紹了springboot全局異常處理代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
前言:
開(kāi)發(fā)中異常的處理必不可少,常用的就是 throw 和 try catch,這樣一個(gè)項(xiàng)目到最后會(huì)出現(xiàn)很多冗余的代碼,使用全局異常處理避免過(guò)多冗余代碼。
全局異常處理:
1、pom 依賴(延續(xù)上一章代碼):
<dependencies>
<!-- Spring Boot Web 依賴 -->
<!-- Web 依賴 - 包含了 spring-boot-starter-validation 依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- spring-boot整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql驅(qū)動(dòng) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid數(shù)據(jù)庫(kù)連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--lombok依賴-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<!-- fastjson 依賴添加 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
2、公共的結(jié)果類封裝:
這里簡(jiǎn)單封裝,實(shí)際根據(jù)自己業(yè)務(wù)需求去封裝。
@Getter
@Setter
public class ApiResult {
// 響應(yīng)業(yè)務(wù)狀態(tài)
private Integer status;
// 響應(yīng)消息
private String msg;
// 響應(yīng)中的數(shù)據(jù)
private Object data;
public static ApiResult build(Integer status, String msg, Object data) {
return new ApiResult(status, msg, data);
}
public static ApiResult ok(Object data) {
return new ApiResult(data);
}
public static ApiResult ok() {
return new ApiResult(null);
}
public ApiResult() { }
public static ApiResult build(Integer status, String msg) {
return new ApiResult(status, msg, null);
}
public ApiResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public ApiResult(Object data) {
this.status = 200;
this.msg = "OK";
this.data = data;
}
}
3、添加全局異常處理類(在入口函數(shù)下的包中新建):
/**
* 全局異常處理 Handler
* @ControllerAdvice 配置控制器通知
* annotations 屬性: 指定我們需要攔截的注解,一個(gè)或多個(gè)(多個(gè)加到大括號(hào)中,逗號(hào)分隔)
*/
// @RestControllerAdvice = @ResponseBody + @ControllerAdvice
@RestControllerAdvice(annotations = {RestController.class})
@Slf4j
public class GlobalExceptionHandler {
/**
* 默認(rèn)統(tǒng)一異常處理方法
* @ExceptionHandler 注解用來(lái)配置需要攔截的異常類型, 也可以是自定義異常
*/
@ExceptionHandler(Exception.class)
// 此處可以指定返回的狀態(tài)碼 和 返回 結(jié)果說(shuō)明
// @ResponseStatus(reason = "exception",value = HttpStatus.BAD_REQUEST)
public Object runtimeExceptionHandler(Exception e) {
// 打印異常信息到控制臺(tái)
e.printStackTrace();
log.error("請(qǐng)求出現(xiàn)異常,異常信息為: {}", e.getMessage());
// 使用公共的結(jié)果類封裝返回結(jié)果, 這里我指定狀態(tài)碼為 400
return ApiResult.build(400, e.getMessage());
}
}
4、異常測(cè)試類:
/**
* 異常處理測(cè)試 controller
*/
@RestController
@Slf4j
public class ExceptionController {
@RequestMapping(value = "/exception/{number}")
public ApiResult exception(@PathVariable int number) {
int res = 10 / number;
log.info(">>>>>結(jié)果number為: {}", res);
return ApiResult.ok();
}
}
5、測(cè)試:
5.1、請(qǐng)求接口:http://localhost:8080/exception/1 結(jié)果正常
5.2、請(qǐng)求接口:http://localhost:8080/exception/0 出現(xiàn)除以 0 錯(cuò)誤,全局異常處理起作用,返回指定結(jié)果集。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Maven 打包項(xiàng)目到私服 (deploy)的配置方法
這篇文章主要介紹了Maven 打包項(xiàng)目到私服 (deploy)的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Spring Bean三級(jí)緩存機(jī)制的技術(shù)指南
在 Spring 框架中,Bean 的創(chuàng)建和管理是容器的核心功能之一,了提高性能,Spring 采用了多級(jí)緩存機(jī)制來(lái)減少不必要的對(duì)象創(chuàng)建和配置,本文將詳細(xì)介紹 Spring 中 Bean 三級(jí)緩存的實(shí)現(xiàn)原理,并通過(guò)代碼示例幫助你理解這個(gè)機(jī)制的工作方式,需要的朋友可以參考下2025-04-04
使用jd-gui反編譯修改jar包里的.class并重新生成新jar問(wèn)題
這篇文章主要介紹了使用jd-gui反編譯修改jar包里的.class并重新生成新jar問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
java圖論弗洛伊德和迪杰斯特拉算法解決最短路徑問(wèn)題
這篇文章主要為大家介紹了java圖論弗洛伊德算法和迪杰斯特拉算法解決最短路徑的問(wèn)題示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Java實(shí)現(xiàn)AES加密和解密方式完整示例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)AES加密和解密方式的相關(guān)資料,AES加密為最常見(jiàn)的對(duì)稱加密算法,是一種區(qū)塊加密標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用,需要的朋友可以參考下2023-10-10
Java lambda表達(dá)式實(shí)現(xiàn)Flink WordCount過(guò)程解析
這篇文章主要介紹了Java lambda表達(dá)式實(shí)現(xiàn)Flink WordCount過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
SpringBoot2基于重復(fù)創(chuàng)建bean的問(wèn)題及解決
這篇文章主要介紹了SpringBoot2基于重復(fù)創(chuàng)建bean的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Spring事務(wù)Transaction配置的五種注入方式詳解
這篇文章主要介紹了Spring事務(wù)Transaction配置的五種注入方式詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Java數(shù)據(jù)結(jié)構(gòu)之Map與Set專篇講解
這篇文章通過(guò)實(shí)例面試題目來(lái)講解Java中Map和Set之間的關(guān)系,具有很好的參考價(jià)值,Map與Set在面試中經(jīng)常會(huì)遇到。一起跟隨小編過(guò)來(lái)看看吧2022-01-01

