首页 > 其他分享 >Jexl 字符串转表达式

Jexl 字符串转表达式

时间:2022-10-10 18:15:16浏览次数:42  
标签:map String jexl Jexl 字符串 new public 表达式 name

一 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);
    }

 

标签:map,String,jexl,Jexl,字符串,new,public,表达式,name
From: https://www.cnblogs.com/hanjun0612/p/16776673.html

相关文章

  • js 判断字符串中是否包含某个字符串
    方法一(推荐使用): indexOf()indexOf()方法:返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回-1。varstr="LiHeErNAN";......
  • 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
    正则表达式的先行断言(lookahead)和后行断言(lookbehind)1.(?=pattern)只匹配后面紧跟着pattern正则的那一部分即:对后头提出要求,后头必须匹配pattern正则例如对"a......
  • Java 多线程(四)Lambda表达式
    Lamda表达式λ希腊字母表中排序第十一位的字母,英语名为Lambda避免匿名内部类定义过的多其实质属于函数式编程的概念理解函数式接口是学习Java8Lambda表达式的关键所......
  • 23. JS String(字符串)对象
    1.前言JavaScriptString对象用于处理字符串,其中提供了大量操作字符串的方法,以及一些属性。创建String对象的语法格式如下:varval=newString(value);varval=......
  • python练习题-数据类型-列表拼接,按指定字符串查找,首尾去空(三)
    1.问题描述。把下图中列表,元组,字典中的值,组成一个列表。并查找列表中元素,移除每个元素的空格,并查找以a或者A开头并且以c结尾的所有元素。li=["alec","aric","Alex","T......
  • 习题11-5 指定位置输出字符串 (20分)
    本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。函数接口定义:char*match(......
  • 随机生成字符串,支持字母、数字、下划线
    //随机生成64位字符,支持字母、数字、下划线//this.clientSecretValue输入框的值randomRange(){letrandomStr=''letcharStr='ABCDEF......
  • SQL操作:WITH表达式及其应用
    SQL标准1999中,在传统SQL语法的基础上增加了with表达式的使用,使得SQL语句的编程可以更加灵活和具备可扩展性。本文将围绕with,以及更高阶的withrecursive表达式介绍其语法特......
  • js 字符串 截取字串 slice,substring,substr方法对比
    js字符串截取字串slice,substring,substr方法对比1.slice()方法slice()提取字符串的某个部分并在新字符串中返回被提取的部分。该方法设置两个参数:起始索引(开始位......
  • javascript parse date string - js 字符串转日期
    一、日期数字newDate().getTime()//1665370859678数字表示从UTC+0时区的1970年1月1日0时0分0秒开始的那一刻起,所经过的毫秒数。无论是在北京还是伦敦,此时此刻,无论......