JEXL表达式引擎的使用

JEXL表达式引擎

  • 简单介绍
  • 如何使用

简单介绍

JEXL全称是Java表达式语言(Java Expression Language),简单地说,它可以配合Java程序运算一些简单的表达式。具体可以识别哪些表达式,其中包含最基本的加减乘除、大于小于等于、与或非、按位与、按位或、按位异或、按位补码,除此之外还可以调用Java程序中的方法,比如判断一个字符串是否包含某一个字符,就可以调用String的contains()方法来判断,在下文中会给出这样的示例。官方文档:http://commons.apache.org/proper/commons-jexl/reference/syntax.html

如何使用

首先引入依赖包

<dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jexl</artifactId>
        <version>2.1.1</version>
</dependency>

基本步骤是:

  • 创建表达式引擎对象
  • 创建表达式语句
  • 创建Context对象,为表达式中的未知数赋值
  • 使用表达式引擎创建表达式对象
  • 使用表达式对象计算
// 创建表达式引擎对象
JexlEngine engine = new JexlEngine();   // JexlEngine engine = new JexlBuilder.create();
// 创建表达式语句
String expressionStr = "money > 5000";
// 创建Context对象,为表达式中的未知数赋值
JexlContext context = new MapContext();
context.set("money","10000");           // context.set("StringUtil", new StringUtil());  // set之后可以调用StringUtil中的所有方法
// 使用表达式引擎创建表达式对象
Expression expression = engine.createExpression(expressionStr);   // expressionStr可以是方法调用,如StringUtil.contains("yesss")
// 使用表达式对象计算
Object evaluate = expression.evaluate(context);
// 输出结果:true
System.out.println(evaluate);

基本的使用套路就是这样,使用起来很简单,下面列举一下常用的几种场景,大家可以结合官方文档举一反三

// 判断提交时间是否大于某一个时间点
String expressionStr = "submitTime.getTime() >= 1583856000000";
context.set("submitTime",new Date());
// 判断字符串是否包含“成功”
String expressionStr = "text.contains('成功')";
context.set("text","请求成功");
// 判断字符串是否为空
String expressionStr = "text eq null || text.size() == 0"
// 判断是否属于数组中的任意一个
String expressionStr = "text =~ ['请求成功','啦啦','吧啦吧啦']"
// 判断是否不属于数组中的任意一个
String expressionStr = "text !~ ['请求成功','啦啦','吧啦吧啦']"
// 表达式为逻辑语句,运算结果为:2
String expressionStr = "if(a>b){c=a;}else{c=b};";
context.set("a", 1);
context.set("b", 2);
// 表达式为对象调用方法
String expressionStr = "person.getName()";
Person person = new Person();
person.setName("Sixj");
context.set("person", person);

你可能感兴趣的:(Java)