gpt4 book ai didi

android - 是否有用于 Retrofit 的 'ResponseInterceptor'(作为其对应的 RequestInterceptor)组件?

转载 作者:行者123 更新时间:2023-11-29 14:48:26 26 4
gpt4 key购买 nike

我正在使用 Retrofit 及其大部分组件,如 ErrorHandler、Callbacks 和 RequestInterceptor 等。但我错过了类似“ResponseInterceptor”的东西,它允许我以通用方式过滤或读取响应中出现的 header ,作为一个中心点,而不是必须为每个服务调用设置一个回调。这是目前我知道如何实现这样一个目标的唯一方法,但是必须在每次服务调用时显式传递回调对象是不可取的。

我想要的是对存在特定 header 的任何响应采取行动,因此它就像一个分析每个响应的通用对象(“ResponseInterceptor”)。

有这样的事吗?或者关于如何实现这一点而不必在每个服务调用上都设置回调对象的更好的想法?

提前致谢!

最佳答案

作为Retrofit目前没有提供标准的方法,我设法通过装饰 retrofit.client.Client 使其工作提供给 retrofit.RestAdapter 的实现,请看下面:

1)为拦截器定义一个接口(interface)

import retrofit.client.Response;

public interface ResponseInterceptor {

void intercept(Response response);
}

2) 实现它。

public class MyResponseInterceptor implements ResponseInterceptor {

@Override
public void intercept(Response response) {
List<Header> headers = response.getHeaders();
//... read the headers the way you like
}
}

3)为客户端实现装饰器:

 public final class ResponseInterceptorClient extends OkClient {
private final ResponseInterceptor responseInterceptor;

public ResponseInterceptorClient(OkHttpClient okHttpClient, ResponseInterceptor responseInterceptor) {
super(okHttpClient);
this.responseInterceptor = responseInterceptor;
}

@Override
public Response execute(Request request) throws IOException {
Response response = super.execute(request);
doIntercept(response);
return response;
}

private void doIntercept(Response response) {
if (responseInterceptor != null) {
responseInterceptor.intercept(response);
}
}
}

4) 然后将其传递给 RestAdapter:

  RestAdapter.Builder restBuilder = new RestAdapter.Builder();
//...
restBuilder.setClient(new ResponseInterceptorClient(okHttpClient, new MyResponseInterceptor()));
//...
restAdapter = restBuilder.build();

它非常简单,图书馆可以很容易地提供它,就像 RequestInterceptor ,直到不是,这是一种方法。享受吧!

更新 03/2016:自 Retrofit 2.0无需制作自己的 ResponseInterceptor,您可以使用 OkHttp interceptors与它集成。

关于android - 是否有用于 Retrofit 的 'ResponseInterceptor'(作为其对应的 RequestInterceptor)组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27230418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com