【问题标题】:Retrofit/Robospice: get response headers from successful request?Retrofit/Robospice:从成功的请求中获取响应标头?
【发布时间】:2014-08-14 01:22:59
【问题描述】:

我正在使用 Retrofit/Robospice 在我构建的应用程序中使用 RetrofitGsonSpiceService 进行 api 调用。所有响应都使用 GSON 转换器转换为 POJO,但是我需要从响应标头中检索一些信息。我找不到任何获取标头的方法(如果请求不成功,我只能获取标头,因为原始响应是在错误对象中发送的!)如何在响应转换之前拦截响应以获取标头?

【问题讨论】:

    标签: android retrofit robospice


    【解决方案1】:

    我花了几分钟才弄清楚@mato 在他的回答中的确切建议。下面是一个具体示例,说明如何替换 Retrofit 附带的 OkClient 以拦截响应头。

    public class InterceptingOkClient extends OkClient
    {
        public InterceptingOkClient()
        {
        }
    
        public InterceptingOkClient(OkHttpClient client)
        {
            super(client);
        }
    
        @Override
        public Response execute(Request request) throws IOException
        {
            Response response = super.execute(request);
    
            for (Header header : response.getHeaders())
            {
                // do something with header
            }
    
            return response;
        }
    }
    

    然后您将自定义客户端的实例传递给RestAdapter.Builder

    RestAdapter restAdapter = new RestAdapter.Builder()
        .setClient(new InterceptingOkClient())
        ....
        .build();
    

    【讨论】:

      【解决方案2】:

      RoboSpice 的设计方式是它对您最终在应用中使用的 HTTP 客户端一无所知。话虽如此,您应该从 HTTP 客户端获取响应标头。由于 Retrofit 可能使用 ApacheOkHttp默认的 Android HTTP 客户端,您应该看看哪些您当前使用的客户端。考虑到Retrofit会根据某些事情来选择HTTP客户端(请参考Retrofit文档,或者深入代码,你会发现),除非你手动指定。

      Retrofit 为客户端定义了一个名为Client 的接口。如果你看一下源代码,你会看到三个类实现了这个接口:ApacheClientOkClientUrlConnectionClient。根据您要使用的其中一个,从其中一个扩展,并尝试挂钩到响应返回时执行的代码,以便您可以从中获取标头。

      完成此操作后,您必须将自定义 Client 设置为 Retrofit

      【讨论】:

      • 我的回答对你有帮助吗?
      • 嗨@mato。我需要做这件事。您的回答对我有帮助,但我不知道如何处理“尝试挂钩代码”部分。你能举个例子吗?这可能很有帮助。谢谢。
      • @DEIONaLiMs 我的意思是扩展这三个类中的一个并覆盖从服务器返回响应的功能,以便您可以获取标头并执行您需要的任何操作。然后可以将您创建的这个新类设置为 Retrofit 作为 HTTP 客户端。明白了吗?
      猜你喜欢
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2016-08-07
      • 2015-10-18
      相关资源
      最近更新 更多