使用Aviator需要引入jar包
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>3.3.0</version>
</dependency>
测试
Map<String, Object> map = Maps.newHashMap();
map.put("change", "23");
map.put("refund", "3.21");
map.put("haha", 9);
String aviatorScript1 = "if (haha == nil) {return 0;}return change + refund;";
String aviatorScript2 = "if (haha == nil) {return 0;}return decimal(change) + decimal(refund);";
Object result = AviatorEvaluator.execute(aviatorScript1, map, true);
Object result2 = AviatorEvaluator.execute(aviatorScript2, map, true);
log.info("result: {}", result);
log.info("result2: {}", result2);
结果
result: 233.21
result2: 26.21
aviator支持运算,取值,还有一个内置函数可以用。有些需要业务配置表达式的场景可以使用它,比如风控系统,然后程序执行它,这样就可以避免每次业务规则改变都需要改代码发布,而且aviator里还有内置函数可以使用。
内置函数
函数名称 | 说明 |
---|---|
sysdate() | 返回当前日期对象 java.util.Date |
rand() | 返回一个介于 0-1 的随机数,double 类型 |
string.split(target,regex,[limit]) | Java 里的 String.split 方法一致,2.1.1 新增函数 |
seq.eq(value) | 用来判断传入的参数是否跟 value 相等,用于 filter 函数,如filter(seq,seq.eq(3)) 过滤返回等于3 的元素组成的集合 |
…
AviatorScript 编程指南
https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90