转眼一个月又过去了,这次主要 mock 功能搞了很久,网上资料主要集中在后端单元测试的 mock,以及前端自己项目的 mock

后端:

前端:

在茫茫帖子中找到了一个 springboot 动态 mock 能够实现我的想法:https://blog.csdn.net/lt326030434/article/details/108649878

最后决定:后端使用 springboot 自己做服务,前端使用 mock.js 写写规则

springboot service 关键代码:

public void dynamicMock(HttpServletRequest request, HttpServletResponse response) {
    String requestPath = request.getServletPath();
    LambdaQueryWrapper<ApiMock> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(ApiMock::getMockUrl, requestPath);
    ApiMock mock = baseMapper.selectOne(wrapper);
    if (mock != null) {
        OutputStream outputStream = null;
                    //解决浏览器乱码
        response.setHeader("content-type", "text/html;charset=utf-8");
        try {
            outputStream = response.getOutputStream();
            if (mock.getStatus() == 0) {
                byte[] dataByteArr = mock.getResponseBody().getBytes();
                outputStream.write(dataByteArr);
                response.setStatus(mock.getResponseCode());
            }else {
                String error = "您未开启mock状态";
                byte[] dataByteArr = error.getBytes();
                outputStream.write(dataByteArr);
            }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

通过 status 状态来控制 mock 的开关,response.setStatus 可以返回自己想要的响应码

前端代码:

import Mock from "mockjs"

var dataMock = Mock.mock(this.jsonData);
this.apiMock.responseBody = JSON.stringify(dataMock)

前端通过 Mock.js 把模板数据转换,然后传给数据库保存(这里用的有点担心,怕数据太大影响数据库的性能,但是暂时没有找到更好的办法)

最后的效果图:

mock 地址是 baseUrl + apiId + 接口路径,方法和响应码可以自己定义,Mock.js 的模板也可以自己定义,但必须要是 json 格式

做完这个功能问安卓开发怎么样,答曰:baseUrl 太麻烦了,apiId 也不是固定的,总之就是麻烦,可是大家不都是这么做的么😂


↙↙↙阅读原文可查看相关链接,并与作者交流