【工具类】后台Mock工具类

news/2024/10/4 19:31:50/

目录

  • 一、介绍
  • 二、使用方法
    • 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 {@Autowiredprivate 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.ppmy.cn/news/7292.html

相关文章

写一个计算器【后缀表达式】(C++)

前言&#xff1a; 闲来无事&#xff0c; 用后缀表达式写了个计算器。。。 支持加()、减(-)、乘(*)、除(/)、乘方(^) 啥是后缀表达式&#xff1a; 波兰逻辑学家卢卡西维奇发明的表示表达式的方法 后缀式即逆波兰式&#xff0c;是波兰逻辑学家卢卡西维奇&#xff08;&#…

uTools V3.3.0 效率工具集

前言 uTools是一款基于electron开发的工具集软件&#xff0c;通过快捷唤醒搜索&#xff0c;直接打开各种功能&#xff0c;非常方便。 uTools uTools是一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件&#xff0c;打造你得心应手的工具集合。 通过快捷键…

Oracle数据库Date类型查询结果多出“.0“的解决方法

oracle设置数据库某张表的字段类型为date&#xff0c;数据库存值为 2019-11-25 18:51:47 格式&#xff0c;但是从数据库查询出来之后格式为 String stopTime map.get("stopTime").toString;2019-11-25 18:51:47.0 &#xff0c;多了个零&#xff0c;不知是毫秒还是…

企业活动如何邀请电视台媒体记者参加和报道

作为大众媒体&#xff0c;电视媒体具有极为广泛的受众群体。同时&#xff0c;它又极具权威性。在电视上播放的新闻报道和各类节目&#xff0c;都需要经过严格的审查和核实。因而电视媒体尤其是央视和各省级卫视电视台&#xff0c;和许多其他媒体相比&#xff0c;更受大众的信赖…

Qt5操作Office及Word读写实例

欢迎小伙伴的点评✨✨&#xff0c;相互学习&#x1f680;&#x1f680;&#x1f680; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文章目录前言一、Qt操作Office的…

【数据结构】Leetcode旋转数组

目录 一、题目说明 二、题目解析 一、题目说明 题目链接&#xff1a;leetcode旋转数组 给你一个数组&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例1&#xff1a; 输入&#xff1a;nums [1,2,3,4,5,6,7],k 3 输出&#xff1a;[5,6,7,1,2,3,4…

掌握这17张图,没人比你更懂RecyclerView的预加载

回顾上一篇文章&#xff0c;我们为了减少描述问题的维度&#xff0c;于演示之前附加了许多限制条件&#xff0c;比如禁用了RecyclerView的预拉取机制。 实际上&#xff0c;预拉取(prefetch)机制作为RecyclerView的重要特性之一&#xff0c;常常与缓存复用机制一起配合使用、共…

FlinkSql开窗实例:消费kafka写入文本

前言 以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中&#xff0c;对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。 Flink官网示例 准备 本地下载个kafka&#xff08;单机即可&#xff09;&#xff0c;新建个桌面目…