1. 程式人生 > >異常統一處理的一些思路

異常統一處理的一些思路

1.AppException 統一處理所有異常

//將出現的所有異常都用AppException
public class AppException extends Exception {

    public int statusCode;
    public String responseMessage;

    public AppException(int status, String responseMessage) {
        super(responseMessage);
        this.statusCode = status;
        this
.responseMessage = responseMessage; } public AppException(String detailMessage) { super(detailMessage); } } //像這樣替換 @Override public T parse(HttpURLConnection connection,OnProgressUpdatedListener listener) throws AppException { try { int status = connection.getResponseCode(); if
(status == HttpStatus.SC_OK) { ...... }else { //都看作是聯網失敗 throw new AppException(status,connection.getResponseMessage()); } } catch (Exception e) { throw new AppException(e.getMessage()); } }

2.常見的異常

所有異常
引數錯誤,403
伺服器錯誤,500
伺服器返回json格式不正確,導致反序列化不成功

APPException還可以加在其它地方,eg,請求之前判斷URL是否正確
if (!URLUtil.isNetworkUrl(request.url)) {
        throw new AppException("the url :" + request.url + " is not valid");
    }
//public static boolean isNetworkUrl(String url) {
    if (url == null || url.length() == 0) {
        return false;
    }
    return isHttpUrl(url) || isHttpsUrl(url);
}

3.token 失效的解決思路

考慮這樣一種場景,當User登入之後很長一段時間都不用登入
方案很多:cookie、session、token
這裡看一下 token:

當User登入之後,伺服器會返回一個token的字串,這個字串是一個UserID + 其它資訊的一個MD5
把這個token記錄下來,以後所有的請求都會加上這個token,把它解密出來判斷是否失效

沒有失效,回取出對應ID的所有資料
失效,返回403 + token 失效

//框架裡面會寫介面,還有請求佇列中,我的是Request和RequestTask
public interface OnGlobalExceptionListener {

    //處理類似 token 失效這類的Exception,錯誤程式碼403
    boolean handleException(AppException exception);
}

//Request
  public OnGlobalExceptionListener onGlobalExceptionListener;

  public void setGlobalExceptionListener(OnGlobalExceptionListener onGlobalExceptionListener) {
        this.onGlobalExceptionListener = onGlobalExceptionListener;
    }

//RequestTask
    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        if (o instanceof AppException) {
            if (request.onGlobalExceptionListener != null){
                if(!request.onGlobalExceptionListener.handleException((AppException)o)){
                    request.iCallback.onFailure((AppException) o);
                }
            }
        } else {
            request.iCallback.onSuccess(o);
        }
    }

4.自己處理

public class BaseActivity extends ActionBarActivity implements OnGlobalExceptionListener {
    @Override
    public boolean handleException(AppException e) {
        if (e.statusCode == 403) {//伺服器拒絕訪問
            if("token invalid".equals(e.responseMessage)) {
//                        TODO relogin
                return true;
            }
        }
        return false;
    }
}
 @Override
 public void onFailure(AppException e) {
     if (e.statusCode == 403) {
        if ("password incorrect".equals(e.responseMessage)) {
//                        TODO
        } else if ("token invalid".equals(e.responseMessage)) {
//                        TODO relogin
        }
     }
     e.printStackTrace();
}

相關推薦

異常統一處理一些思路

1.AppException 統一處理所有異常 //將出現的所有異常都用AppException public class AppException extends Exception {

java異常統一處理

出現 actor 錯誤 統一處理 type .get 。。 cfa getc 一般系統拋出的錯誤不含錯誤代碼,出去部分的404,500,400之外,我們如果想吧錯誤代碼定義的更細致,就需要自己繼承RuntimeExeption這個類後,重新定義構造方法定義自己的錯誤信息。

Spring MVC異常統一處理的三種方式

  Spring 統一異常處理有 3 種方式,分別為: 使用 @ ExceptionHandler 註解 實現 HandlerExceptionResolver 介面 使用 @controlleradvice 註解 HandlerExceptionReso

spring boot 系統異常統一處理

1.系統異常捕獲 @ControllerAdvice(annotations = {RestController.class}) public class GlobalExceptionHandler { private Logger logger = LoggerFactory.get

spring mvc異常統一處理(實現HandlerExceptionResolver介面)不生效的問題解決

spring mvc異常統一處理常見的有3種方式: 使用 @ ExceptionHandler 註解 實現 HandlerExceptionResolver 介面 使用 @controlleradvice 註解 詳細的使用方法可參考博文:https://blog.c

SpringBoot異常統一處理機制

springboot官網說了三種異常處理,分為機器客戶端和瀏覽器客戶端,區別為機器客戶端請求返回的是頭中Accept是"/"或者空,異常返回值json,瀏覽器客戶端請求頭中Accept是"text/html" 返回的是html 如下圖: 機器客戶端: 瀏覽器客戶端: 下面

Springboot-系統異常統一處理(介面程式設計異常處理

Springboot-系統異常統一處理(介面程式設計異常) 1. 系統異常捕獲 /** * 全域性異常處理 * @Author: wangxc * @GitHub: https://github.com/vector4wang * @CS

基於spring aop的dubbo異常統一處理

dubbo統一異常處理,呼叫方只顯示封裝後的異常。 1、返回封裝後的Exception 2、返回封裝後的統一返回資訊 import org.aspectj.lang.annotation.AfterT

spring mvc異常統一處理(使用ControllerAdvice註解)

1、配置 spring 版本: [html] view plain copy print? <org.springframework-version>4.1.9.RELEASE</org.springframework-version>

Spring MVC異常統一處理(包括普通請求異常以及ajax請求異常

通常SpringMVC對異常的配置都是返回某個jsp檢視給使用者,但是通過ajax方式發起請求,即使發生異常,前臺也無法獲得任何異常提示資訊。因此需要對異常進行統一的處理,對於普通請求以及ajax請求的異常都有效。 1.Spring MVC的異常處理機制 Spring

Springboot專案全域性異常統一處理

最近在做專案時需要對異常進行全域性統一處理,主要是一些分類入庫以及記錄日誌等,因為專案是基於Springboot的,所以去網路上找了一些部落格文件,然後再結合專案本身的一些特殊需求做了些許改造,現在記錄下來便於以後檢視。在網路上找到關於Springboot全域性異常統一處理的

Spring MVC異常統一處理(異常資訊的國際化,日誌記錄)

       JAVA EE專案中,不管是對底層的資料操作,還是業務層的處理過程,還是控制層的處理,都不可避免的會遇到各種可預知的(業務異常主動丟擲)、不可預知的異常需要處理。一般dao層、service層的異常都會直接丟擲,最後由controller統一進行處理,每個過程

Spring MVC異常統一處理

/** * 自定義返回結果封裝類 */public class ResultUtil implements Serializable {private static final long serialVersionUID = 1L;private Integer code;private String msg

spring Aop實現身份驗證和springboot異常統一處理

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。 一、spring Aop身份驗證 一般,如果使用者沒有登入的話,使用者只可以檢視商品,但是其他的,比如支付等是不能夠進行操作的,這個時候,我們

SpringMVC全域性異常統一處理

(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver:<!-- springmvc提供的簡單異常處理器 --> <be

@ControllerAdvice自定義異常統一處理

正常來說一個系統肯定有很多業務異常。而這些業務異常的資訊如何返回給前臺呈現給使用者。比如使用者的某些操作不被允許,需要給使用者提示。 Spring 提供了@ControllerAdvice這個註解,這個註解可以實現全域性異常處理,全域性資料繫結,全域性資料預處理,這裡主要說下使用這個註解實現全域性異常處理。

Web層框架對網站中所有異常統一處理

配置文件 數據安全 攔截器 網站 如何 一個網站的異常信息作為專業的人士,是不會輕易暴露給用戶的,因為那樣狠不安全,顯得你漏是一回事,只要還是考慮到網站的數據安全問題,下面給大家分享一下一些常見的web層框架是如何處理統一的異常。   之前都是在Struts2的配置文件中配置攔截器

人臉美白廋臉磨皮自動的化處理一些思路(機器視覺)

項目 原則 htm 功能 gpo 過程 warp 做到 細節 分享一下思路,自己也驗證過了,應該靠譜 流程 1.人臉檢測加特征點定位 2.根據特征點進行廋臉之類的操作(根據定位點可以做更多好玩的東西,類似faceu的功能也可以實現) 3.美白皮膚 4.磨皮皮膚 原則上不放代

springboot(3)——整合freemarker模板、AOP統一處理、全域性異常處理

《三》、整合freemarker模板、AOP統一處理、全域性異常處理 一、整合freemarker模板引擎 1、引入freemarker依賴 <dependency> <groupId>org.springframe

Javaweb異常提示資訊統一處理

Java異常封裝(自己定義錯誤碼和描述,附原始碼) 2016年01月29日 22:30:54 小寶鴿 閱讀數:23262 標籤: java異常 更多 個人分類: Java基礎