springboot全局異常處理代碼實例
這篇文章主要介紹了springboot全局異常處理代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
前言:
開發(fā)中異常的處理必不可少,常用的就是 throw 和 try catch,這樣一個項目到最后會出現(xiàn)很多冗余的代碼,使用全局異常處理避免過多冗余代碼。
全局異常處理:
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驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid數(shù)據(jù)庫連接池 -->
<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、公共的結果類封裝:
這里簡單封裝,實際根據(jù)自己業(yè)務需求去封裝。
@Getter
@Setter
public class ApiResult {
// 響應業(yè)務狀態(tài)
private Integer status;
// 響應消息
private String msg;
// 響應中的數(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 屬性: 指定我們需要攔截的注解,一個或多個(多個加到大括號中,逗號分隔)
*/
// @RestControllerAdvice = @ResponseBody + @ControllerAdvice
@RestControllerAdvice(annotations = {RestController.class})
@Slf4j
public class GlobalExceptionHandler {
/**
* 默認統(tǒng)一異常處理方法
* @ExceptionHandler 注解用來配置需要攔截的異常類型, 也可以是自定義異常
*/
@ExceptionHandler(Exception.class)
// 此處可以指定返回的狀態(tài)碼 和 返回 結果說明
// @ResponseStatus(reason = "exception",value = HttpStatus.BAD_REQUEST)
public Object runtimeExceptionHandler(Exception e) {
// 打印異常信息到控制臺
e.printStackTrace();
log.error("請求出現(xiàn)異常,異常信息為: {}", e.getMessage());
// 使用公共的結果類封裝返回結果, 這里我指定狀態(tài)碼為 400
return ApiResult.build(400, e.getMessage());
}
}
4、異常測試類:
/**
* 異常處理測試 controller
*/
@RestController
@Slf4j
public class ExceptionController {
@RequestMapping(value = "/exception/{number}")
public ApiResult exception(@PathVariable int number) {
int res = 10 / number;
log.info(">>>>>結果number為: {}", res);
return ApiResult.ok();
}
}
5、測試:
5.1、請求接口:http://localhost:8080/exception/1 結果正常
5.2、請求接口:http://localhost:8080/exception/0 出現(xiàn)除以 0 錯誤,全局異常處理起作用,返回指定結果集。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。
您可能感興趣的文章
- 01-10Springboot中@Value的使用詳解
- 01-10springboot實現(xiàn)文件上傳步驟解析
- 01-10springboot jta atomikos實現(xiàn)分布式事物管理
- 01-10SpringBoot使用RabbitMQ延時隊列(小白必備)
- 01-10如何基于SpringBoot部署外部Tomcat過程解析
- 01-10springboot集成fastDfs過程代碼實例
- 01-10springmvc級聯(lián)屬性處理無法轉換異常問題解決
- 01-10SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
- 01-10springboot 配置DRUID數(shù)據(jù)源的方法實例分析
- 01-10springboot2.0使用Hikari連接池的方法(替換druid)


閱讀排行
本欄相關
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
- 01-10利用Java實現(xiàn)復制Excel工作表功能
- 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
- 01-10java基于poi導出excel透視表代碼實例
- 01-10java實現(xiàn)液晶數(shù)字字體顯示當前時間
- 01-10基于Java驗證jwt token代碼實例
- 01-10Java動態(tài)顯示當前日期和時間
- 01-10淺談Java中真的只有值傳遞么
隨機閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結


