自定义mock数据生成器
说明
- 本文介绍如何对
org.apache.shenyu.plugin.mock.generator.Generator
进行自定义扩展。 - mock 数据生成表达式需要满足
${name|param1|param2|...}
的格式。
扩展实现
- 新建一个工程,引入如下依赖:
<dependencies>
<dependency>
<groupId>org.apache.shenyu</groupId>
<artifactId>shenyu-plugin-mock</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
- 新增一个类
CustomerGenerator
,实现org.apache.shenyu.plugin.mock.generator.Generator
。
@Join
public class CustomGenerator implements Generator<String> {
@Override
public String getName() {
// 生成器的名称,即 表达式第一个 | 之前的内容
}
@Override
public String generate() {
// 实现数据生成的逻辑
}
@Override
public int getParamSize() {
// 表达式必填参数的个数
}
@Override
public void initParam(List params, String rule) {
// params 会返回 表达式按照 | 切分后,除名称之外的内容
// rule 原表达式的内容,如果有自定的参数处理逻辑 可以使用这个参数
}
@Override
public boolean match(String rule) {
// 校验当前表达式是否可以合法
}
@Override
public String[] getPrefixAndSuffix() {
// 返回 生成内容之后添加的前缀和后缀 ,请返回 包含两个元素的字符串数组
// 第 0 个元素是前缀,第 1 个元素是后缀
}
}
- 在工程的 META-INF/shenyu 目录创建
org.apache.shenyu.plugin.mock.generator.Generator
文件中添加如下内容:
script
${spi name}=${custom class path}
${spi name}
表示spi
的名称,${spi name }
需要与 Generator 实现类中 getName() 方法定义的一致 ${custom class path}
表示该类的全限定名。比如:
script
custom=xxx.xxx.xxx.CustomGenerator
- 将工程打包,拷贝到网关 (bootstrap-bin) 的
lib
或ext-lib
目录。