Retrofit2.0的进阶使用-拦截器
2019-02-13 本文已影响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();
}