【问题标题】:Retrofit intercept response改造拦截响应
【发布时间】:2016-05-02 01:06:13
【问题描述】:

我有以下 ws 请求代码:

RestAdapter mRestAdapter = new RestAdapter.Builder()
            .setEndpoint(ROOT_HOME_URL)
            .setRequestInterceptor(mRequestInterceptor)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .build();


    mInterfaceWs = mRestAdapter.create(InterfaceWs.class);

如何在响应到达我的模型之前拦截它?我想替换响应中的一些键字符串。

在我的回复中,我有一些名为:.type 和 #text 的键,而在我的模型中,我无法将这些名称设置为字段

我能做什么?请帮帮我

compile 'com.squareup.retrofit:retrofit:1.7.0'



RequestInterceptor mRequestInterceptor = new RequestInterceptor()
    {
        @Override
        public void intercept(RequestFacade request)
        {
            request.addHeader("Accept","application/json");
        }
    };

【问题讨论】:

  • 贴出 mRequestInterceptor 的代码
  • 您使用的是哪个版本的改造。 stackoverflow.com/questions/32963394/…
  • 贴在代码上方
  • 您应该更新到最新版本的改造。使用改造与 okhttp 然后你可以添加一个拦截器到 okhttpclient

标签: android retrofit


【解决方案1】:

所以...我设法在没有任何拦截器的情况下解决了我的问题。

对于那些和我有同样问题的人:

public class Atribute
{
@SerializedName(".type")
public String type;

@SerializedName("#text")
public String text;

public String getType() { return type; }
public String getText() { return text; }
}

【讨论】:

    【解决方案2】:

    您可以使用 OKHttp 网络拦截器来拦截响应并对其进行修改。为此,您需要设置一个自定义 OkHTTP 客户端以用于改造。

    OkHttpClient client = new OkHttpClient();
    client.networkInterceptors().add(new Interceptor() {
                @Override
                public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
                    com.squareup.okhttp.Response response = chain.proceed(chain.request());
                    //GET The response body and modify it before returning
                    return response;
                }
            });
    

    然后将其设置为与改造一起使用。

    RestAdapter mRestAdapter = new RestAdapter.Builder()
                .setClient(new OkClient(client))
                .setEndpoint(ROOT_HOME_URL)
                .setRequestInterceptor(mRequestInterceptor)
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .build();
    

    你可以阅读更多关于network interceptors here

    P.S: 该链接是最新版本的 OkHttp。在最新版本的 OkHttp 中初始化网络拦截器的方式发生了变化,但概念是相同的。我提供的代码应该适用于您的旧版本(改造 1.7.0)

    【讨论】:

    • 好的。我会在第二天试一试。我下班了。我希望它会奏效。谢谢
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多