java異常處理攔截器詳情
使用異常處理攔截器,可以不用寫那麼多try…catch…。
我有個功能,就是前端提交短信內容到後端,後端進行一系列的處理,其中是要將短信內容提交到公共短信接口。微服務框架,公共短信接口是另外一個服務。這樣子就會有一個隱患,假如這個服務不開,或者因為網絡原因無法訪問,怎麼辦?
可以原子操作,也可以重新提交啥的,不管怎麼搞,錯誤提示是避免不瞭的。問題是,系統赤裸裸的貼代碼的錯誤提示方式,極不友好。應當捕獲這個錯誤,然後改用較為友好的內容進行提示。
最原始的辦法,可以層層try…catch…,
從service
一直到controller
這裡返回給前端。但未免太繁瑣,感覺很low
。作為程序員,不應當這麼機械。
參照網上辦法,在controller
這裡設置一個異常處理攔截器:
@RestController @RequestMapping("sms/order") public class DzSmsSendOrderController { 。。。 @ExceptionHandler(value = { RuntimeException.class}) public ResultBody handleRuntimeException(Exception ex) throws Exception { if (ex.getMessage().indexOf("project-sms-api") != -1) { //鑒別一下是否為目標異常 return ResultBody.failed().msg("訪問短信接口失敗,請確認相關服務是否已開啟"); } else throw ex; } }
這個ResultBody
是一個自定義的對象,前端根據其返回的編號等判斷是否成功。
@ApiModel(value = "響應結果") public class ResultBody<T> implements Serializable { 。。。 public static ResultBody failed() { return new ResultBody().code(ErrorCode.FAIL.getCode()).msg(ErrorCode.FAIL.getMessage()); } @Override public String toString() { return "ResultBody{" + "code=" + code + ", message='" + message + '\'' + ", path='" + path + '\'' + ", data=" + data + ", httpStatus=" + httpStatus + ", extra=" + extra + ", timestamp=" + timestamp + '}'; } } public enum ErrorCode { OK(0, "success"), FAIL(1000, "fail"), ALERT(1001, "alert"), }
前端就根據這個code
,來判斷成功與否。
到此這篇關於java異常處理攔截器詳情的文章就介紹到這瞭,更多相關java異常處理攔截器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解SpringBoot 統一後端返回格式的方法
- java使用枚舉封裝錯誤碼及錯誤信息詳解
- springboot框架的全局異常處理方案詳解
- Spring Boot統一處理全局異常的實戰教程
- 如何設計一個安全的API接口詳解