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!

推薦閱讀: