2017-06-05 79 views
0

改造捕獲特定響應代碼,我有40多個HTTP調用改造REST客戶端界面。我像這樣初始化我的RestClient:的Android,爲所有請求

public class RestClient { 

    private static final String BASE_URL = "http://example.com/"; 

    private static final int TIMEOUT_IN_SECONDS = 30; 

    private static OkHttpClient okHttpClient = new OkHttpClient.Builder() 
     .addInterceptor(getInterceptor()) 
     .connectTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS) 
     .readTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS) 
     .writeTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS) 
     .build(); 


    private static Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(BASE_URL) 
     .client(okHttpClient) 
     .addConverterFactory(GsonConverterFactory.create()) 
     .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
     .build(); 

    private RestClient() { 

    } 

    private static HttpLoggingInterceptor getInterceptor() { 
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY 
      : HttpLoggingInterceptor.Level.NONE); 
     return interceptor; 
    } 

    public static MyService request() { 
     return retrofit.create(MyService.class); 
    } 

} 

所有請求,除了授權,都需要特殊令牌。當此標記過期時,REST API將以403代碼錯誤進行響應。

我不能添加檢查來自我的每個API調用的驗證碼的響應,因爲在我的應用程序超過100所API調用。

是否有可能以某種方式在我的RestClient類中捕獲403 response code以便我可以再次打開授權活動?

回答

2

首先,我認爲403是錯誤的,401可能是正確的。如果您確信當該令牌到期REST API與403代碼錯誤響應。您不能使用Authenticator,這將在401發生時使用。所以,你需要使用Interceptor。你可以創建TokenInterceptor工具Interceptor

public class TokenInterceptor implements Interceptor { 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 
     Response response = chain.proceed(request); 
     if (response.code() == 403) { 
      doSomething(); 
     } 
     return response; 
    } 
} 

okHttpClient添加此TokenInterceptor。