【发布时间】:2017-05-23 19:36:10
【问题描述】:
我看到 OkHttp 中存在 ResponseInterceptor。我想使用一个,但我直接使用的是 Retrofit 而不是 OkHttp。
我的问题首先是可以使用 ResponseInterceptors 进行改造吗?如果有怎么办? Request 拦截器有 api 方法,但我找不到任何对应的 Response 方法。
【问题讨论】:
我看到 OkHttp 中存在 ResponseInterceptor。我想使用一个,但我直接使用的是 Retrofit 而不是 OkHttp。
我的问题首先是可以使用 ResponseInterceptors 进行改造吗?如果有怎么办? Request 拦截器有 api 方法,但我找不到任何对应的 Response 方法。
【问题讨论】:
对于任何偶然发现这一点的人,我在进一步搜索后设法找到了答案。请注意,以下需要 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);
【讨论】:
另请参阅此this question,它似乎与此重复。一种可能是覆盖 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);
【讨论】: