【工具类】后台Mock工具类

news2025/1/18 11:47:43

目录

  • 一、介绍
  • 二、使用方法
    • 1. Controller层定义接口
    • 2. 编写json文件
    • 3. 开启AOP
    • 4. 调用接口验证
  • 三、源码

一、介绍

Controller层定义完接口后,不需要写业务逻辑。编写Json文件,调用接口时返回json文件的数据。

优点:

  • 设计阶段即可定义好接口,前后端直接根据mock数据联调
  • 前台对数据切换无感知,后台实现接口逻辑即可无缝切换真假数据
  • 前台对接口变更敏感,接口变更更及时。

二、使用方法

使用@RestController标记的类,里面的public方法在被调用时,如果发现返回结果是null或者返回类型是void,将会读取 Resource/mock/类名/方法名.json 的内容并返回

1. Controller层定义接口

要求使用@RestController标记类

在这里插入图片描述

2. 编写json文件

json文件的路径为 Resource/mock/类名/方法名.json

在这里插入图片描述

3. 开启AOP

主类添加注解 @EnableAspectJAutoProxy

4. 调用接口验证

浏览器 GET ip:port/api/server/v1/dictionary/test 得到的响应为json文件的内容。

三、源码

先复制Json读取工具类

  1. 主要逻辑

AOP拦截@RestController的方法,寻找Resource/mock/类名/方法名.json的文件,如果返回类型为void或返回结果为null,则返回json数据。

@Slf4j
@Component
@Aspect
public class MockAspect {
    @Autowired
    private ResponseFunction responseFunction;

    @Around("@within(restController) && execution(public * *.*(..))")
    public Object mockResult(ProceedingJoinPoint joinPoint, RestController restController) throws Throwable {
        Object result = joinPoint.proceed();
        if (result == null) {
            // 获取方法签名
            MethodSignature ms = (MethodSignature) joinPoint.getSignature();
            // 获取方法
            Method targetMethod = ms.getMethod();
            // 方法所在类
            Class<?> declaringClass = targetMethod.getDeclaringClass();
            // 所在类的全限定名
            String fullClassName = declaringClass.getName();
            // 获取最后的名
            String className = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
            // 获取方法名
            String methodName = ms.getName();
            // 拼接路径
            String mockPath = "/mock/" + className + "/" + methodName + ".json";
            log.warn("当前接口{}无数据!将返回mock数据", mockPath);
            try {
                result = JsonFileUtils.readFile(mockPath);
            } catch (Exception e) {
                log.warn("当前路径{}下无mock配置!", mockPath);
                return null;
            }
            // 这里用于包装返回结果。
            if (responseFunction == null || this.responseFunction.getFunction() == null) {
                return result;
            } else {
                return this.responseFunction.getFunction().apply(result);
            }
        } else {
            return result;
        }
    }
}

  1. 返回结果包装类

经常会有返回结果封装类,可以包装成函数式接口

@Data
public class ResponseFunction {
    Function<Object,Object> function;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116904.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos 图形化yum管理工具 - yum Extender

文章目录背景安装开启yum-GUI工具 - yumexyum list installed列出软件包的依赖yum cleam背景 作为一个yum工程师&#xff0c;长期备受yum 命令的煎熬。 难道yum就乜有一个GUI管理界面吗&#xff1f; yum Extender (简称 yumex ) , 是 yum 的图形化操作界面。可以通过 yumex 方…

ActiveMQ高级特性和大厂面试常考重点

目录 一、引入消息队列之后该如何保证其高可用性 二、异步投递Async Sends 三、延迟投递和定时投递 四、ActiveMQ消费重试机制 五、死信队列 六、如何保证消息不被重复消费呢?幂等性问题你谈谈 一、引入消息队列之后该如何保证其高可用性 ActiveMQ集群模式_zoeil的博客-…

【机器学习】KNN 算法介绍

文章目录一、KNN 简介二、KNN 核心思想实例分析&#xff1a;K 值的影响三、KNN 的关键1. 距离计算1. 闵可夫斯基距离2. 曼哈顿距离3. 欧氏距离4. 切比雪夫距离5. 余弦距离总结2. K值选择四、KNN 的改进&#xff1a;KDTree五、KNN 回归算法参考链接一、KNN 简介 KNN 算法&#…

想在微信上使用chatGPT?小程序?公众号?企业微信,最终还是选择了企业微信版本的chatgpt

chatgpt的接口现在都可以正常用了&#xff0c;但是怎么把这个功能放在手机上随用随开呢&#xff1f;微信个人聊天版本小程序版本公众号版本企业微信版本逻辑实现方式微信个人聊天版本 网上很多微信机器人版本的&#xff0c;但是原理是网页版微信&#xff0c;很多账号都不能登陆…

golang指针

指针 区别于C/C中的指针&#xff0c;Go语言中的指针不能进行偏移和运算&#xff0c;是安全指针。 要搞明白Go语言中的指针需要先知道3个概念&#xff1a;指针地址、指针类型和指针取值。 1.1. Go语言中的指针 Go语言中的函数传参都是值拷贝&#xff0c;当我们想要修改某个变…

Linux中如何理解线程?线程ID到底是什么?

朋友们好&#xff0c;这里简要介绍了进程和线程的区别以及对LINUX中线程ID的理解&#xff0c;本人目前理解尚浅&#xff0c;若文中有表述不当的地方还望理解并指正&#xff0c;谢谢大家&#xff01; 文章目录一&#xff1a;进程和线程二&#xff1a;线程ID和进程地址空间布局一…

5 项目部署

5.1 Linux-项目部署 5.1.1 环境 5.1.1.1 开发环境&#xff08;dev&#xff09; 外部用户无法访问&#xff0c;开发人员使用&#xff0c;版本变动很大 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发. 在开发环境中安装大量的软件&#xff0c;这样会导致环境的稳…

2022 年度盘点 | 更成熟的 AI,更破圈的技术狂欢

By 超神经内容一览&#xff1a;2022 年 AI 领域发展不断提速&#xff0c;新技术成果纷纷落地&#xff0c;模型迭代加速升级。本文总结了 2022 年 AI 领域各大公司的技术成就。关键词&#xff1a;年终盘点 大厂 技术创新2022 年在此起彼伏的咳嗽声中接近尾声&#xff0c;这一…

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数

Android Studio移动应用开发——onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_dear_jing的博客-程序员宅基地 - 程序员宅基地 在做Android生命周期实验过程中&#xff0c;把 Log.i(TAG, "(1) onCreate()") 写到了含有两个参数的函数 onSave…

HTML5 元素拖放

文章目录HTML5 元素拖放概述触发事件实现元素拖放功能dataTransfer元素拖动效果垃圾箱效果HTML5 元素拖放 概述 在HTML5中&#xff0c;我们只需要给元素添加一个draggable属性&#xff0c;然后设置该属性值为true&#xff0c;就能实现元素的拖放。 拖放&#xff0c;指的是“…

【Python】Numpy分布函数总结

文章目录总表均匀分布和三角分布幂分布与正态分布相关的分布与Gamma相关的分布极值分布总表 np.random中提供了一系列的分布函数&#xff0c;用以生成符合某种分布的随机数。下表中&#xff0c;如未作特殊说明&#xff0c;均有一个size参数&#xff0c;用以描述生成数组的尺寸…

【综合笔试题】难度 1.5/5,常规二叉树爆搜题

题目描述 这是 LeetCode 上的 95. 不同的二叉搜索树 II &#xff0c;难度为 中等。 Tag : 「树」、「二叉搜索树」、「BST」、「DFS」、「递归」、「爆搜」 给你一个整数 n&#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以…

2022出圈的ML研究:爆火的Stable Diffusion、通才智能体Gato,LeCun转推

这些机器学习领域的研究你都读过吗&#xff1f; 2022 年即将步入尾声。在这一年里&#xff0c;机器学习领域涌现出了大量有价值的论文&#xff0c;对机器学习社区产生了深远的影响。 今日&#xff0c;ML & NLP 研究者、Meta AI 技术产品营销经理、DAIR.AI 创始人 Elvis S.…

CSRF漏洞渗透与攻防(一)

目录 前言 什么是CSRF漏洞 CSRF实现流程 CSRF漏洞危害 XSS漏洞危害 CSRF与XSS区别 CSRF分类 GET型&#xff1a; POST型&#xff1a; CSRF漏洞案列模拟 CSRF常用Payload&#xff1a; CSRF漏洞挖掘 检测工具 CSRF漏洞防御 防御思路 我们该如何去防御CSRF漏洞…

LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)

打家劫舍平板板打家劫舍转圈圈打家劫舍&#xff08;进阶版&#xff09;平板板打家劫舍 转化子问题&#xff1a; 按顺序偷n间房子&#xff0c;就是考虑偷前n-1间房子还是偷前n-2间房子再偷第n间房子。 列出公式&#xff1a; res[n] max{ res[n-1] , 数组中最后一个数据res[n-…

企业信息化之源代码防泄密场景分析

场景描述 随着企业信息化发展迅速&#xff0c;越来越多的无形资产面临着被泄露&#xff0c;被盗取的&#xff0c;或员工无意导致的数据泄密风险。尤其是有源码开发的企业&#xff0c;源代码的安全更是重中之重&#xff0c;一旦泄密&#xff0c;有可能给企业带来不可估量的损失…

全程数字化的企业电子招标采购管理系统源码

全程数字化的采购管理 智能化平台化电子化内外协同 明理满足采购业务全程数字化&#xff0c; 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 传统采购模式面临的挑战 如何以最合适的价格,找到最优的供应商,购买到最好的产品和服务?…

程序员必备网站,建议收藏!

俗话说的好&#xff0c;一个程序员&#xff0c;20%靠知识储备&#xff0c;80%靠网络搜索。 打开代码&#xff0c;打开Google&#xff0c;开始工作。 那么常用的写码软件&#xff0c;你知道几个呢&#xff1f; 下面我们来一起看一下常用的写码软件吧~ 建议收藏本文&#xff…

【算法】面试题 - 链表

链表相关面试题141. 环形链表问题&#xff1a;快慢指针为什么一定会相遇142. 环形链表 II问题&#xff1a;如何确认入口160. 相交链表237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表&#xff08;两种解法&#xff09;扩展&#x…

国产手机扬眉吐气,终于打击了苹果的嚣张气焰

苹果在9月份、10月份都取得了快速增长&#xff0c;而国产手机品牌持续下滑&#xff0c;但是11月份终于让国产手机捡回了主动权&#xff0c;11月份的数据显示有国产手机品牌的出货量大幅增长&#xff0c;而苹果的出货量却大幅下滑&#xff0c;国产手机成功反击了苹果。分析机构给…