使用異常處理攔截器,可以不用寫那么多try…catch…。
我有個功能,就是前端提交短信內容到后端,后端進行一系列的處理,其中是要將短信內容提交到公共短信接口。微服務框架,公共短信接口是另外一個服務。這樣子就會有一個隱患,假如這個服務不開,或者因為網絡原因無法訪問,怎么辦?
可以原子操作,也可以重新提交啥的,不管怎么搞,錯誤提示是避免不了的。問題是,系統赤裸裸的貼代碼的錯誤提示方式,極不友好。應當捕獲這個錯誤,然后改用較為友好的內容進行提示。
最原始的辦法,可以層層try…catch…,
從service
一直到controller
這里返回給前端。但未免太繁瑣,感覺很low
。作為程序員,不應當這么機械。
參照網上辦法,在controller
這里設置一個異常處理攔截器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@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
是一個自定義的對象,前端根據其返回的編號等判斷是否成功。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@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異常處理攔截器內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/leftfist/article/details/120888027