gpt4 book ai didi

android - OkHttp 拦截器中的 Chain 对象是什么? retrofit

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:32 27 4
gpt4 key购买 nike

我正在观看有关如何使用 OkHttp 拦截器添加 header 的教程,但我对一些事情感到困惑。

  • 什么是对象?
  • Request original = chain.request() 做什么?
  • return chain.proceed(request) 做什么?

代码:

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();  
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();

// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.header("Authorization", "auth-value");

Request request = requestBuilder.build();
return chain.proceed(request);
}
});

OkHttpClient client = httpClient.build();

最佳答案

retrofit 中的 Chain 对象是 Chain of Responsibility 的一个实现设计模式,每个拦截器都是一个处理对象,通过chain.request()获取前一个拦截器的结果,在上面应用自己的逻辑(通过构建器模式),通常传递给下一个单元(拦截器)使用 chain.proceed

在某些特殊情况下,拦截器可能会抛出异常以停止链的正常流程并阻止 API 被调用(例如,拦截器检查 JWT token 的到期时间),或者返回一个响应而不实际调用其他链项目(缓存是这种用法的一个例子)。

显然,拦截器是按照添加的顺序调用的。该链的最后一个单元连接到 OkHttp 并执行 HTTP 请求;然后改造尝试使用转换器工厂将从 API 获取的纯结果转换为您想要的对象。

关于android - OkHttp 拦截器中的 Chain 对象是什么? retrofit ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393085/

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