Retrofit - Intercept responses globally

前端 未结 3 1114
旧巷少年郎
旧巷少年郎 2020-12-29 02:44

I\'d like to intercept all responses received by the retrofit engine, and scan for HTTP error code, for example error 403.

I\'m aware I can use the failure(RetrofitE

3条回答
  •  感动是毒
    2020-12-29 03:26

    I was able to accomplish that by adding an interceptor to the OkHttpClient that retrofit is using.

    Kotlin + Retrofit 2.x

    val clientBuilder = OkHttpClient.Builder()
    clientBuilder.addInterceptor { chain ->
                val request = chain.request()
                val response = chain.proceed(request)
                if (response.code() == 403) {
                    handleForbiddenResponse()
                }
                response
            }
    

    Retrofit 2.x:

       OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
       clientBuilder.
                addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                       Request request = chain.request();
                       Response response = chain.proceed(request);
                       if (response.code() == 403) {
                             handleForbiddenResponse();
                       }
                       return response;
                    }
                });
    
    
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(clientBuilder.build();)
                .build();
    

    Retrofit 1.x:

    public class ForbiddenInterceptor implements Interceptor {
    
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Response response = chain.proceed(request);
            if (response.code() == 403) {
                 handleForbiddenResponse();
            }
            return response;
        }
    }
    
    
    
    OkHttpClient okHttpClient = Utils.createUnsafeOkHttpClient();
    okHttpClient.interceptors().add(new ForbiddenInterceptor());
    
    RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
            .setEndpoint(API_BASE_URL)
            .setClient(new OkClient(okHttpClient));
    

提交回复
热议问题