【问题标题】:Using Response Interceptors with Retrofit使用响应拦截器进行改造
【发布时间】:2017-05-23 19:36:10
【问题描述】:

我看到 OkHttp 中存在 ResponseInterceptor。我想使用一个,但我直接使用的是 Retrofit 而不是 OkHttp。

我的问题首先是可以使用 ResponseInterceptors 进行改造吗?如果有怎么办? Request 拦截器有 api 方法,但我找不到任何对应的 Response 方法。

【问题讨论】:

    标签: android retrofit okhttp


    【解决方案1】:

    对于任何偶然发现这一点的人,我在进一步搜索后设法找到了答案。请注意,以下需要 OkHttp 2.2+ 和改造 1.9+

    //First create the OkHttp client and add your response interceptor
    OkHttpClient httpClient = new OkHttpClient();
    httpClient.interceptors().add(new ApiResponseInterceptor());
    
    //then set the client on your RestAdapter
    RestAdapter.Builder builder = new RestAdapter.Builder()
           .setEndpoint(ACCOUNTS_SERVICE_BASE_URL)
           .setClient(new OkClient(httpClient))
           .setConverter(new GsonConverter(gson)) 
           .setRequestInterceptor(getAuthRequestInterceptor())
           .setLogLevel(RestAdapter.LogLevel.FULL); 
    

    【讨论】:

      【解决方案2】:

      另请参阅此this question,它似乎与此重复。一种可能是覆盖 Retrofit 的 OkClient 中的 execute 方法:

      OkClient client = new OkClient(okHttpClient) {
          @Override
          public retrofit.client.Response execute(retrofit.client.Request request) throws IOException {
              retrofit.client.Response response = super.execute(request);
      
              // Inspect 'response' before returning it
      
              return response;
          }
      };
      
      RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
              .setEndpoint(API_BASE_URL)
              .setClient(client);
      

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2022-07-02
        • 2018-10-23
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        相关资源
        最近更新 更多