天天看點

android OkHttp Interceptor模拟傳回

前言

使用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位址進行攔截,并且傳回特定的資料。

小結