自定义mock数据生成器

说明

  1. 本文介绍如何对 org.apache.shenyu.plugin.mock.generator.Generator 进行自定义扩展。
  2. mock 数据生成表达式需要满足 ${name|param1|param2|...} 的格式。

扩展实现

  • 新建一个工程,引入如下依赖:
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-plugin-mock</artifactId>
  5. <version>${project.version}</version>
  6. </dependency>
  7. </dependencies>
  • 新增一个类 CustomerGenerator,实现 org.apache.shenyu.plugin.mock.generator.Generator
  1. @Join
  2. public class CustomGenerator implements Generator<String> {
  3. @Override
  4. public String getName() {
  5. // 生成器的名称,即 表达式第一个 | 之前的内容
  6. }
  7. @Override
  8. public String generate() {
  9. // 实现数据生成的逻辑
  10. }
  11. @Override
  12. public int getParamSize() {
  13. // 表达式必填参数的个数
  14. }
  15. @Override
  16. public void initParam(List params, String rule) {
  17. // params 会返回 表达式按照 | 切分后,除名称之外的内容
  18. // rule 原表达式的内容,如果有自定的参数处理逻辑 可以使用这个参数
  19. }
  20. @Override
  21. public boolean match(String rule) {
  22. // 校验当前表达式是否可以合法
  23. }
  24. @Override
  25. public String[] getPrefixAndSuffix() {
  26. // 返回 生成内容之后添加的前缀和后缀 ,请返回 包含两个元素的字符串数组
  27. // 第 0 个元素是前缀,第 1 个元素是后缀
  28. }
  29. }
  • 在工程的 META-INF/shenyu 目录创建 org.apache.shenyu.plugin.mock.generator.Generator文件中添加如下内容:

script

  1. ${spi name}=${custom class path}

${spi name}表示spi的名称,${spi name } 需要与 Generator 实现类中 getName() 方法定义的一致 ${custom class path}表示该类的全限定名。比如:

script

  1. custom=xxx.xxx.xxx.CustomGenerator
  • 将工程打包,拷贝到网关 (bootstrap-bin) 的 libext-lib 目录。