當前位置:
首頁 > 知識 > spring boot / cloud異常處理思路

spring boot / cloud異常處理思路

思路

  • 自定義統一的ResposeBody類 : 用於統一響應格式

  • 自定義統一的Error類 : 用於統一異常格式

  • 自定義異常 : 區分不同場景的異常

  • 實現ExceptionHandler : 用於攔截處理異常

實現

1.創建ErrorResult類


publicclass ErrorResult implements Serializable {

........省略

//異常發生時間private Date exceptionDate;

//異常類名private String exceptionType;

//異常描述private String exceptionMessage;

//異常堆棧private String exceptionStackTrace;

........省略

}

2.創建RestResponse類

使用泛型,來適應不同類型的結果集

響應代碼和響應描述,可自定義枚舉來規範

注意,一定有留有無參的構造函數,否則json轉換會報錯


publicclass RestResponse<T> implements Serializable {

........省略

//響應IDprivate String id = UUID.randomUUID().toString();

//響應代碼private String code = "SUCCESS";

//響應描述private String message = "操作成功";

//響應體private T result = null;

//錯誤體private ErrorResult error = null;

//構造函數publicRestResponse() { super();
}

//構造函數publicRestResponse(ErrorCode errorCode, ErrorResult error) { super();

this.code = errorCode.name();

this.message = errorCode.value();

this.error = error;
}

........省略

}

3.自定義異常

檢查型異常

publicclass SystemException extends Exception {
........省略
}

運行時異常


publicclass SystemRuntimeException extends RuntimeException {
........省略
}

其他類型異常,如:認證異常,許可權異常,參數校驗異常,等等,按需定義


publicclass AuthException extends RuntimeException {
........省略
}

4.創建ExceptionMapping類


@ControllerAdvice

publicclass ExceptionMapping {

........省略

}

定義私有的方法構造ErrorResult


private ErrorResult buildError(Exception exception) {

ErrorResult error = newErrorResult();

error.setType(exception.getClass().getName());

error.setMessage(ExceptionUtils.getMessage(exception));
error.setStackTrace(ExceptionUtils.getStackTrace(exception));

error.setDate(new Date());

return error;

}

按照異常類型,攔截處理異常,攔截的優先順序遵循類的集成關係,優先攔截子類異常


@ExceptionHandler(value = 要攔截的異常.class)

@ResponseStatus(響應狀態)

@ResponseBody

public RestResponse<String> exception(要攔截的異常 exception) {

returnnew RestResponse<>(ErrorCode.ERROR, buildError(exception));

}

這裡提醒注意點,如果想要攔截404錯誤的話,需要在spring boot中做如下設置

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

中公優就業IT培訓,總有你想學的:http://xue.ujiuye.com

勤工儉學計劃,0元學IT!

http://www.ujiuye.com/zt/qgjx/?wt.bd=mmxtt

找工作太難?好漢,讓我助你一臂之力!

http://www.ujiuye.com/zt/jyfc/?wt.bd=mmxtt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

SpringMVC詳解——參數綁定
利用ES6的Promise.all實現至少請求多長時間
「js高手之路」從原型鏈開始圖解繼承到組合繼承的產生
淺談 css 之 position用法
什麼是MySQL的事務

TAG:IT優就業 |

您可能感興趣

Jdk 動態代理異常處理分析,UndeclaredThrowableException
Django Channel處理Websocket鏈接
linux-shell命令處理json數據
Servlet Cookie 處理
Oculus Santa Cruz或採用高通Snapdragon 845處理器
扎克伯格正處理Cambridge Analytica引發的爭議
三款照片處理軟體橫評:Lightroom、CaptureOne、AfterShot
python介面測試之token&session的處理
ZUUL 處理 gerrit patch-set 的流程
Python modbus 浮點型數據處理
偽 「Photoshop」的圖像處理
JQury datatables 改變處理中 顯示樣式
Google愛上Intel+AMD合體處理器:Chromebook要用它
分享 Trinnov Audio Altitude 32家庭影院前級處理器是怎樣工作的?
Google Chrome通過改進Cookie處理來提升用戶隱私
iPad找不到Apple Pencil了怎麼處理?
戴爾用第八代處理器刷新了Alienware和Inspiron產品陣容
Google也要採用高通處理器 打造常時連網Chromebook
Servlet 異常處理
Intel 8核Coffee Lake/Xeon E處理器雙雙現身