改造中的静态 headers 和动态 headers 问题

Static headers and dynamic headers issue in retrofit

我需要有关 Java 改造请求的帮助:

场景 1:我添加了一个几乎没有静态的拦截器 headers

场景 2:在请求 API 时,也发送少量动态 headers

请求完成后,我检查请求 headers,如下所示。

response.raw().request().headers()

在哪里我可以看到静态 headers 但看不到动态 headers。

下面是拦截器设置静态的代码headers:

public class AuthInterceptor implements Interceptor {

    public AuthInterceptor() {
    }

    protected String authtoken;

    public AuthInterceptor(String authtoken) {
        defaultHeader();
        this.authtoken = authtoken;
    }

    public void setAuthtoken(String authtoken) {
        this.authtoken = authtoken;
    }

    private Headers.Builder defaultHeader() {
        final String xUserAgent = Util.SDK_NAME + "/" + Util.SDK_VERSION;
        return new Headers.Builder()
                .add("X-User-Agent", xUserAgent)
                .add("User-Agent", Util.defaultUserAgent())
                .add("Content-Type", "application/json");
    }

    public Headers.Builder addHeader(@NotNull String key, @NotNull String value) {
        defaultHeader().add(key, value);
        return defaultHeader();
    }

    @NotNull
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request.Builder request = chain.request().newBuilder()
                .headers(defaultHeader().build());

        if (this.authtoken != null) {
            request.addHeader("authtoken", this.authtoken);
        }
        return chain.proceed(request.build());
    }


}

并发送动态 headers 如下所示。

    @POST("stacks")
    Call<ResponseBody> create(
            @Header("organization_uid") String orgUid,
            @Body RequestBody body);

在我看来问题出在您使用:

Request.Builder request = chain.request().newBuilder()
            .headers(defaultHeader().build());

如果您查看 'headers' 方法的文档,它指出:删除此构建器上的所有 headers 并添加 {@code headers} .

只需将每个 header 添加到 addHeader 就可以了。