百科
依赖
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
案例
准备:
package com.ltx.demo.test_jexl;
/**
* @author tianxiang
*/
public class User {
String name = "ltx";
public User(String name) {
this.name = name;
}
public User() {}
public String getName() {
return name;
}
}
测试:
package com.ltx.demo.test_jexl;
import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.MapContext;
import org.apache.commons.jexl3.internal.Engine;
import java.util.HashMap;
import java.util.Map;
/**
* @author tianxiang
*/
public class TestJexl {
public static void main(String[] args) {
TestJexl testJexl = new TestJexl();
//测试案例1
String expression1 = "user.getName().equals(id)";//表达式
Map<String, Object> env = new HashMap<>();//参数
env.put("id", "123456");
env.put("user", new User());
boolean res = (boolean) testJexl.invokeMethod(expression1, env);//执行
System.out.println("执行结果" + res);
//测试案例2
String expression2 = "price > 100 ? price * (amount + 1) : price * 0";
env = new HashMap<>();
env.put("amount",9);
env.put("price",123);
Integer res2 = (Integer) testJexl.invokeMethod(expression2, env);
System.out.println("执行结果" + res2);
}
private Object invokeMethod(String jexlExp, Map<String, Object> map) {
//引擎
JexlEngine jexl = new Engine();
//表达式
JexlExpression e = jexl.createExpression(jexlExp);
//上下文条件(参数)
JexlContext jc = new MapContext();
for (String key : map.keySet()) {
jc.set(key, map.get(key));
}
//执行
if (null == e.evaluate(jc)) {
return "";
}
return e.evaluate(jc);
}
}
测试结果:
执行结果false
执行结果1230