Java 结合 Mock.js 模拟数据

在程序开发初期,或者说有时候需要模拟假数据的情况下,我们可以采用mock 方式生成数据,本次实验采用Mock.js 模拟数据。

mock.js 下载地址 ,打开直接复制保存即可

https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.1-beta3/mock-min.js

Mock.js文档: Mock.js

下载之后 将mock.js 文件放在 resources 目录下即可,如图

Java 结合 Mock.js 模拟数据_第1张图片

 程序中需要引用  JavaScriptEngine,故本次引入 hutool工具类


      cn.hutool
      hutool-all
      5.7.22

编写 自定义mock 数据 js,测试数据如下

print();

function print(){
    var data = Mock.mock({
        'patientId': '@natural( 1000000, 6000000 )',
        'name': '@cname',
        'age': '@natural( 1, 100 )',
        'gender': '@cword(男女)',
        'bedNo': '@natural( 1, 120 )',
        'diag': '@csentence'
    })
    return JSON.stringify(data, null, 4);
}

 话不多说,直接编写测试类,进行测试

public class test {
    private static final Cache lfuCache = CacheUtil.newLFUCache(1);
    private static final JavaScriptEngine scriptEngine = ScriptUtil.getJavaScriptEngine();

    public static void main(String[] args) throws ScriptException {
        // 把mockjs读取到缓存
        if (lfuCache.isEmpty()) {
            String scriptString = FileUtil.readUtf8String("mock-min.js");
            lfuCache.put("scriptString", scriptString, DateUnit.SECOND.getMillis() * 10);
            scriptEngine.eval(scriptString);
        }
        System.out.println(scriptEngine.eval(FileUtil.readUtf8String("my-mock.js")));
    }

}

返回值如下

{
    "id": 2431241,
    "name": "孙桂英",
    "age": 8,
    "gender": "男",
    "bedNo": 17,
    "diag": "京但向无织需叫性科习带种报。"
}

到此,就完成了数据模拟。

Mockjs语法

Mockjs依赖于Node (CommonJS)平台
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台
mockjs是Node.js中的一个模块

数据模板定义 DTD

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:

// 属性名   name
// 生成规则 rule
// 属性值   value
'name|rule': value

注意:

  • 属性名 和 生成规则 之间用 | 分隔。
  • 生成规则 是可选的。
  • 生成规则 有 7 种格式:
    1. 'name|min-max': value
    2. 'name|count': value
    3. 'name|min-max.dmin-dmax': value
    4. 'name|min-max.dcount': value
    5. 'name|count.dmin-dmax': value
    6. 'name|count.dcount': value
    7. 'name|+step': value
  • 生成规则 的 含义 需要依赖 属性值 才能确定。
  • 属性值 中可以含有 @占位符
  • 属性值 还指定了最终值的初始值和类型。

生成规则和示例:

  1. 属性值是字符串 String
    1. 'name|min-max': 'value' 通过重复 'value' 生成一个字符串,重复次数大于等于 min,小于等于 max
    2. 'name|count': 'value' 通过重复 'value' 生成一个字符串,重复次数等于 count
  2. 属性值是数字 Number

    1. 'name|+1': 100 属性值自动加 1,初始值为 100
    2. 'name|1-100': 100 生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型。
    3. 'name|1-100.1-10': 100 生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。

{
     'number1|1-100.1-10': 1,
     'number2|123.1-10': 1,
     'number3|123.3': 1,
     'number4|123.10': 1.123
 }
 // =>
 {
     "number1": 12.92,
     "number2": 123.51,
     "number3": 123.777,
     "number4": 123.1231091814
 }
  1. 属性值是布尔型 Boolean
    1. 'name|1': value 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。
    2. 'name|min-max': value 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)
  2. 属性值是对象 Object
    1. 'name|min-max': {} 从属性值 {} 中随机选取 min 到 max 个属性。
    2. 'name|count': {} 从属性值 {} 中随机选取 count 个属性。
  3. 属性值是数组 Array
    1. 'name|1': [{}, {} ...] 从属性值 [{}, {} ...] 中随机选取 1 个元素,作为最终值。
    2. 'name|min-max': [{}, {} ...] 通过重复属性值 [{}, {} ...] 生成一个新数组,重复次数大于等于 min,小于等于 max
    3. 'name|count': [{}, {} ...] 通过重复属性值 [{}, {} ...] 生成一个新数组,重复次数为 count
  4. 属性值是数组 Function

    'name': function(){} 执行函数 function(){},取其返回值作为最终的属性值,上下文为 'name' 所在的对象。

其他详细语法查看文档即可,在此不做过多赘述。

你可能感兴趣的:(Java,前端,javascript,前端,html,java)