我有超过 40 个 http 调用的 Retrofit Rest 客户端界面。我像这样初始化我的 RestClient:
public class RestClient {
private static final String BASE_URL = "http://example.com/";
private static final int TIMEOUT_IN_SECONDS = 30;
private static OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(getInterceptor())
.connectTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS)
.readTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS)
.writeTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS)
.build();
private static Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
private RestClient() {
}
private static HttpLoggingInterceptor getInterceptor() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY
: HttpLoggingInterceptor.Level.NONE);
return interceptor;
}
public static MyService request() {
return retrofit.create(MyService.class);
}
}
除授权外,所有请求都需要特殊令牌。当此令牌过期时,REST API 会以403
代码错误进行响应。
我无法从我的每个 API 调用中添加对此代码响应的检查,因为我的应用程序中有 100 多个 api 调用。
是否有可能以某种方式赶上403 response code
我的RestClient
班级水平,以便我可以再次打开授权活动?
首先,我认为403
是错误的,401
可能是正确的。如果您确定此令牌到期时 REST API 响应403
代码错误。您不能使用Authenticator
which 将在 401 发生时使用。所以,你需要使用Interceptor
. 你可以创建TokenInterceptor
工具Interceptor
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (response.code() == 403) {
doSomething();
}
return response;
}
}
okHttpClient 添加这个 TokenInterceptor。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句