在 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);
我看到 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);
另请参阅此 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);