在 retrofit2 中使用 Singleton 模式时,如何使用拦截器生成不同的 headers?

When using Singleton pattern for retrofit2, how can I gen different headers with interceptor?

我知道,我可以使用@Header 来表示不同的headers。 但是当我使用单例模式进行改造时,有什么方法可以使拦截器的请求不同headers?

当你使用拦截器拦截请求时,在拦截方法中你可以写如下添加headers:

 Request originalRequest = chain.request();

    HttpUrl originalHttpUrl = originalRequest.url();
    HttpUrl newHttpUrl = originalHttpUrl.newBuilder()
            .build();

    Request newRequest = originalRequest.newBuilder()
            .addHeader(AppConstants.AUTHORIZATION, AppConstants.TOKEN)
            .addHeader(AppConstants.CONTENT_TYPE, AppConstants.APPLICATION_JSON)
            .addHeader(AppConstants.REQUESTED_WITH, AppConstants.XML_HTTP_REQUEST)
            .url(newHttpUrl)
            .build();

    return chain.proceed(newRequest);
}

如果你想在每个请求中添加 headers 那么你可以这样做:

@Headers({
    "Accept: application/json",
    "User-Agent: Your-App-Name",
    "Cache-Control: max-age=640000"
})
@GET(ApiConstants.GET_WORKER_DATA)
Call<ArrayList<Worker>> getWorkerData();

你可以为每个请求添加不同的header,像这样在里面添加header标签

 @GET("YourEndPoint")
    Call<YourClassName> YourFunctionName(@Header("Authorization") String accessToken) ;