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

Posted

技术标签:

【中文标题】改造中的静态标题和动态标题问题【英文标题】:Static headers and dynamic headers issue in retrofit 【发布时间】:2021-09-28 12:25:08 【问题描述】:

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

场景 1:我添加了一个具有少量静态标头的拦截器

场景 2:在请求 API 时,同时发送少量动态标头

当请求完成时,我会检查如下的请求标头。

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

我可以看到静态标题但看不到动态标题。

下面是Interceptor设置静态头的代码:

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());
    



并发送如下动态标头。

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

【问题讨论】:

你能贴出你用来设置标题的代码吗? 在问题中添加了详细信息(代码)。请验证 语法看起来应该可以工作。您是否在 null 检查之前打印出 authToken,以确保它按预期设置? 是的! authtoken 与所有其他静态标头一起工作正常。问题在于我发送的动态标头未附加到请求我可以通过以下方式查看请求标头:response.raw().request().headers() 【参考方案1】:

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

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

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

只需用 addHeader 添加每个标题就可以了。

【讨论】:

以上是关于改造中的静态标题和动态标题问题的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 TensorFlow 中的静态形状和动态形状?

OpenMP 中的“静态”和“动态”调度有啥区别?

使用 Minimal API 改造动态文件提供者

如何在改造调用中设置 url 的静态结尾

静态和动态语言中的依赖注入

具有混合静态/动态内容的 UITableViewController 中的 NSRangeException