改进拦截响应

时间:2016-01-25 16:27:07

标签: android retrofit

我有一个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");
        }
    };

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

您可以使用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)一起使用