springboot2.x如何配置全域性自定義異常
阿新 • • 發佈:2019-01-02
為什麼要捕獲異常?
我們開發中,經常執行時,程式碼會報錯,這時候我們有可能丟擲異常,而不是用try..catch來解決.而且現在前後端分離,如果不捕獲異常的話,前端那邊的人估計會被報的錯搞得焦頭爛額的.
springboot2.x是怎麼自定義異常的?怎麼捕獲異常的?
我們自定義異常類,需要繼承一個RuntimeException父類,並且包裝好自己的異常類,一般是包裝code(錯誤碼),msg(錯誤資訊).
/**
* 自定義異常類
*/
public class TestException extends RuntimeException{
Integer code;
String msg;
public TestException(Integer code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
接著我們需要建立一個異常處理器,這裡是來捕獲異常的.
/**
* 異常處理控制器
*/
@ControllerAdvice
public class TestExceptionHandler {
@ExceptionHandler(value = Exception.class) //一般是捕獲最高階的exception類,或者你想捕獲單獨的一個異常類(比如我們前面建立的TestException,不過推薦這種,相對簡潔)
@ResponseBody //返回資料以json資料傳輸
public JsonData Handler(Exception e){ //jsonData是我自定義的一個包裝類,主要用於傳輸給前端的資料
if(e instanceof TestException){ //判斷異常型別
TestException testException = (TestException) e;
return JsonData.buildError(testException.getMsg(),testException.getCode());
}else{
return JsonData.buildError("全域性異常,未知錯誤!");
}
}
}