SpringBoot的兩種統一錯誤處理方式

2021-09-13 18:01:49 字數 3679 閱讀 9557

1.使用繼承basicerrorcontroller 來實現

springboot為我們提供了自動處理異常的basicerrorcontroller 其返回的json資料如下:

「timestamp」:…

「status」:…

「error」:…

「exception」:…

「path」:…

「message」:…

但一般 前端只需要我們傳的message 資訊,那麼我們需要重新構造返回的json資料

(1)首先 建立錯誤列舉

/**

* @belongsproject: financial

* @belongspackage: com.yhr.manager.error

* @author: yang

* @createtime: 2019-03-26 13:14

* @description: 錯誤種類

*/public

enum errorenum

public

static errorenum getbycode

(string code)

}return unknown;

}public string getcode()

public string getmessage()

public

boolean

iscanrestry()

}

(2)我們通過spring-boot-autoconfigure 依賴包下面 找到乙個屬性basicerrorcontroller

basicerrorcontroller ,建立myerrorcontroller 繼承basicerrorcontroller **如下

public

class

myerrorcontroller

extends

basicerrorcontroller

/** * 自定義錯誤處理結果

* 只要 message資訊 並新增 code ,canretry 資訊

}

加入了我們自己需要的message code canretry 。通過本身bascicontroller 裡的message (這裡的message是我們業務邏輯處理時

assert.

notnull

(product.

getid()

, errorenum.id_not_null.

getcode()

);

而丟擲的列舉id_not_null ,我們將其捕獲 並返回message code canretry

(3)配置errorconfiguration

由於basicerrorcontorller 是被errormvcautoconfiguration 所注入的 於是我們找到errormvcautoconfiguration 注入basicerrorcontroller的方法

public

errormvcautoconfiguration

(serverproperties serverproperties,

objectprovider

> errorviewresolversprovider)

@bean

@conditionalo****singbean

(value = errorcontroller.

class

, search = searchstrategy.current)

public basicerrorcontroller basicerrorcontroller

(errorattributes errorattributes)

因此我們建立自己的errorconfiguration ,複製上面的方法,並做修改

以下是我們自己的errorconfiguration**

/**

* @belongsproject: financial

* @belongspackage: com.yhr.manager.error

* @author: yang

* @createtime: 2019-03-26 13:08

* @description: 錯誤處理相關配置

*//**

* 從 errormvcautoconfiguration 裡複製的方法 再進行改造

*/@configuration

public

class

errorconfiguration

}

好了至此 配置結束 我們檢視結果 就得到我們想要返回的資料了

2.通過@controlleradvice 註解來處理統一錯誤

@controlleradivce 是比@controller 的增強,對於這個註解 ,處理統一錯誤只是它的一種使用方式。

話不多說 **如下:

/**

* @belongsproject: financial

* @belongspackage: com.yhr.manager.error

* @author: yang

* @createtime: 2019-03-26 13:27

* @description: 統一錯誤處理

*///

@controlleradvice

("com.yhr.manager.controller"

)public

class

errorcontrolleradvice

}

@controlleradvice 裡的引數可以指定增強控制器要掃瞄的包,如果制定了 只對這個包產生作用,不指定,是對全域性丟擲的錯誤都產生作用

這裡我們加入乙個type 屬性 來看看兩種處理統一錯誤共存情況下的處理順序

我們訪問:

由此可見 @controlleradvice是優先於myerrorcontroller處理的

如下圖所示:

controlleradvice 是所有controller外包裹的一層

如果我們在@controlleradvice裡丟擲乙個異常,那麼這個異常將會被下一級的myerrorcontroller處理。

springboot的單元測試(總結兩種)

springboot的單元測試,這裡介紹兩種方式,一種是在測試類中新增註解 另一種是在啟動的main方法中繼承commandlinerunner介面 也可以寫在其他方法中 如 對檢視資料庫的連線池資訊 進行單元測試 1.在類上使用註解 runwith springrunner.class sprin...

springboot建立執行緒池的兩種方式小結

目錄 這樣的方式建立的好處是當 用到執行緒池的時候才會初始化核心執行緒數 具體 如下 使用方法 public static void main string args 注意 1.不能使用executors的方法建立執行緒池,這個是大量的生產事故得出來的結論 2.maximumpoolsize本程式使...

java日誌統一整合的兩種方案

slf4j所提供的核心api是一些介面以及乙個logge ctory的工廠類,有點類似於jdbc,在使用slf4j的時候,不需要在 中或配置檔案中指定你打算使用那個具體的日誌系統 spi 如同使用jdbc基本不用考慮具體資料庫一樣,slf4j提供了統一的記錄日誌的介面,只要按照其提供的方法記錄即可,...