Jexl 字符串转表达式
Posted 正怒月神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jexl 字符串转表达式相关的知识,希望对你有一定的参考价值。
一 POM
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl3</artifactId>
<version>3.2.1</version>
</dependency>
二 封装
public class DyMethodUtil
public static Object invokeMethod(String jexlExp, Map<String,Object> map)
JexlEngine jexl = new JexlBuilder().create();
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);
三 提供jexl调用的测试方法
public class TestUtil
public String getBooking(String name)
return name+"111";
四 测试
@Autowired
SfOrderService sfOrderService;
/**
* jexl 调用字符串的equals方法
*/
@Test
public void Test3Jexl()
Map<String,Object> map=new HashMap();
map.put("test","hello");
String expression="test.equals('hello')";
Object obj = DyMethodUtil.invokeMethod(expression,map);
System.out.println(obj);
String expression1="test.equals('hello111')";
Object obj1 = DyMethodUtil.invokeMethod(expression1,map);
System.out.println(obj1);
/**
* jexl 调用某个service的方法
*/
@Test
public void Test4Jexl() throws ScriptException
SfOrder_Req req=new SfOrder_Req();
req.setOrderUUID("2c92808a833aab5501833b048ff10044");
Map<String,Object> map=new HashMap();
map.put("sfOrderService",sfOrderService);
map.put("req",req);
String expression="sfOrderService.find(req)";
Object obj = DyMethodUtil.invokeMethod(expression,map);
System.out.println(obj);
/**
* jexl 调用一个方法,并且进行判断
*/
@Test
public void Test5Jexl()
TestUtil testUtil=new TestUtil();
String name="hello";
Map<String,Object> map=new HashMap();
map.put("testUtil",testUtil);
map.put("name",name);
String expression="testUtil.getBooking(name)!=null && testUtil.getBooking(name).length()>5";
Object obj = DyMethodUtil.invokeMethod(expression,map);
System.out.println(obj);
以上是关于Jexl 字符串转表达式的主要内容,如果未能解决你的问题,请参考以下文章