【问题标题】:How to read custom header response (json object) in retrofit如何在改造中读取自定义标头响应(json对象)
【发布时间】:2019-10-12 18:27:54
【问题描述】:

我有一个授权 api,它返回 null 正文但在标头中带有访问令牌。 我能够读取 okhttp3.Headers 对象并使用

将标题名称设置为 Set
Headers headers = response.headers(); // response object of type Response<T>
Set<String> headerNames = headers.names();

但在代码中,标头对象不显示作为响应返回的自定义标头 (access_token)。但是,在邮递员中,我可以看到如下所示的自定义标题:

access_token -> { "Token":"adklasldalksdalkdask",
"Provider":"ABC" } 

我正在使用拦截器来获取标题,如图所示:

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

有人可以建议如何在身份验证响应中读取访问令牌作为自定义标头的一部分吗?

【问题讨论】:

  • 是的,我似乎已经尝试过: Set headerNames = headers.names(); List headersList = new ArrayList(headerNames);这也给了我空对象 String token = response.get("access_token")
  • 访问令牌是 api 发送的自定义标头。这有什么区别吗?
  • 抱歉,我只是注意到您从邮递员发布的自定义标头是 2 对,令牌和提供者。您是否尝试获取“令牌”而不是“access_token”?另外,如果您可以循环打印标题并打印它们,那么我想您可以检查您是否获得了自定义标题。
  • response.get("Token") 也给出了 null。实际上我尝试检查 logcat 中的标题列表。此特定标头 access_token -> { "Token":"adklasldalksdalkdask", "Provider":"ABC" } 未在此处列出。

标签: android retrofit access-token interceptor response-headers


【解决方案1】:

首先打印整个响应、正文、代码、消息、标题(通过日志记录或其他方式)并尝试从那里找到线索。

我建议您阅读 API 文档并查看它要求的请求类型。

使用 Postman 检查以下哪一项工作正常: 1.表单数据 2.x-www-form-Urlencoded 3.raw 4.二进制

然后在接口的方法声明中相应地设置注解。

例如:在我的情况下,它采用 x-www-form-Urlencoded 所以我不得不使用

来提及它

@FormUrlEncoded @Headers("Content-Type: application/x-www-form-urlencoded")

在方法声明中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2017-04-22
    • 2017-12-10
    • 2016-02-10
    • 2018-04-22
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多