在 Retrofit 中使用响应拦截器

Using Response Interceptors with Retrofit

我看到 OkHttp 中存在 ResponseInterceptors。我想使用一个,但我使用的是 Retrofit 而不是直接使用 OkHttp。

我的问题首先是是否可以将 ResponseInterceptors 与改造一起使用?如果是这样怎么办?请求拦截器有 api 种方法,但我找不到任何相应的响应方法。

对于任何偶然发现这个问题的人,我在进一步搜索后设法找到了答案。请注意,下面需要 OkHttp 2.2+ 和改造 1.9+

//First create the OkHttp client and add your response interceptor
OkHttpClient httpClient = new OkHttpClient();
httpClient.interceptors().add(new ApiResponseInterceptor());

//then set the client on your RestAdapter
RestAdapter.Builder builder = new RestAdapter.Builder()
       .setEndpoint(ACCOUNTS_SERVICE_BASE_URL)
       .setClient(new OkClient(httpClient))
       .setConverter(new GsonConverter(gson)) 
       .setRequestInterceptor(getAuthRequestInterceptor())
       .setLogLevel(RestAdapter.LogLevel.FULL); 

另请参阅此 ,它似乎与此重复。一种可能性是覆盖 Retrofit 的 OkClient:

中的 execute 方法
OkClient client = new OkClient(okHttpClient) {
    @Override
    public retrofit.client.Response execute(retrofit.client.Request request) throws IOException {
        retrofit.client.Response response = super.execute(request);

        // Inspect 'response' before returning it

        return response;
    }
};

RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
        .setEndpoint(API_BASE_URL)
        .setClient(client);