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地址进行拦截,并且返回特定的数据。

小结

使用OkHttp的拦截机制,可实现改变部分代码则可模拟返回数据,返回的数据可在代码中设置,可使用工厂模式将模拟数据的生成变动代码放到Factory中。依赖网络请求框架,若原项目使用OkHttp或Retrofit作为网络框架,可轻易实现模拟接口。

引用
模拟服务器返回数据
https://juejin.im/post/585931621b69e60056f89e98

你可能感兴趣的:(android,基础知识)