繁体   English   中英

Retrofit / Robospice:从成功请求中获取响应头?

[英]Retrofit/Robospice: get response headers from successful request?

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

我花了几分钟时间弄清楚@mato在他的回答中的确切含义。 下面是如何替换OkClient附带的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();

RoboSpice的设计方式与您最终在应用中使用的HTTP客户端无关。 话虽这么说,你应该从HTTP客户端获取响应头。 由于Retrofit可能使用ApacheOkHttp默认的Android HTTP客户端,因此您应该查看当前使用的客户端。 考虑到Retrofit根据某些事情选择HTTP客户端(请参阅Retrofit文档,或深入研究代码,你会发现它),除非你手动指定它。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM