簡體   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