美文网首页
Retrofit2.0的进阶使用-拦截器

Retrofit2.0的进阶使用-拦截器

作者: 太白余风 | 来源:发表于2019-02-13 19:19 被阅读23次
1 请求头拦截器
 @Override
public okhttp3.Response intercept(Chain chain) throws IOException {
    Request request = chain.request();//发起一次请求,如果写了两个会请求两次
    //固定请求参数
    HttpUrl originalHttpUrl = request.url();
    HttpUrl.Builder htbuilder = originalHttpUrl.newBuilder();
    if (!CheckUtil.isNull(HttpHelper.sessionid)) {
        htbuilder.addQueryParameter("sessionid", HttpHelper.sessionid);
    }
    //固定请求头
    HttpUrl url = htbuilder.build();
    Request.Builder builder = request.newBuilder().url(url);
    if (!CheckUtil.isNull(HttpHelper.sessionid)) {
        builder.addHeader("sessionid", HttpHelper.sessionid);
    }

    //打印请求信息
    RequestBody requestBody = request.body();
    String requestMessage = request.method() + ' ' + request.url();
    if (requestBody != null) {
        Buffer buffer = new Buffer();
        requestBody.writeTo(buffer);
        requestMessage += "?" + buffer.readString(Charset.forName("UTF-8"));
    }
    LogUtil.e(requestMessage);
    return chain.proceed(builder.build());
}
2 打印请求信息拦截器
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = chain.proceed(request);
        ResponseBody responseBody = response.body();
        String responseBodyString = (responseBody==null?"null":responseBody.string());
        LogUtil.e("RequestLogInterceptor", request.method() + ' ' + request.url() + ' ' + responseBodyString);
       return response.newBuilder().body(ResponseBody.create(responseBody==null? MediaType.parse("application/json"):responseBody.contentType(),
                responseBodyString.getBytes())).build();
    }

相关文章

网友评论

      本文标题:Retrofit2.0的进阶使用-拦截器

      本文链接:https://www.haomeiwen.com/subject/uxwcdqtx.html