前言
使用okhttp 進行網絡請求,配合retrofit,用起來的确不錯,想要模拟服務端傳回Response,就要使用Interceptor進行設定。
執行個體代碼:
如圖,OkHttp可在Request和Response中設定任意個數的Intercepor(圖中用圓圈辨別),對請求體和響應體進行處理。借助OkHttp Interceptor機制,建立一個MockIntercepor,模拟傳回一個Response,虛線部分為模拟的Response。
/**
* 模拟服務端傳回json資料--友善測試使用
*/
public class MockInterceptor implements Interceptor {
private String responseString = "";
@Override
public Response intercept(Chain chain) throws IOException {
Response response = null;
Response.Builder responseBuilder = new Response.Builder()
.code(200)
.message("")
.request(chain.request())
.protocol(Protocol.HTTP_1_0)
.addHeader("content-type", "application/json");
Request request = chain.request();
if (request.url().toString().contains("asyncDoInvest.c")) { //攔截指定位址
responseString = "{\"sys_time\":1501472461131,\"code\":-15,\"msg\":\"标的過期\"}";
responseBuilder.body(ResponseBody.create(MediaType.parse("application/json"), responseString.getBytes()));//将資料設定到body中
response = responseBuilder.build(); //builder模式建構response
} else {
response = chain.proceed(request);
}
return response;
}
在debug模式下,将此Interceptor添加到網絡請求的OkHttp中,即可對指定的api位址進行攔截,并且傳回特定的資料。