1.使用繼承basicerrorcontroller 來實現
springboot為我們提供了自動處理異常的basicerrorcontroller 其返回的json資料如下:
「timestamp」:…但一般 前端只需要我們傳的message 資訊,那麼我們需要重新構造返回的json資料「status」:…
「error」:…
「exception」:…
「path」:…
「message」:…
(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提供了統一的記錄日誌的介面,只要按照其提供的方法記錄即可,...