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
※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處理器雙雙現身