Groovy常见语法应用在项目中

参考文献

正文

pom.xml

    <dependency>
      <groupId>org.apache.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>4.0.15</version>
      <type>pom</type>
    </dependency>
    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2</artifactId>
      <version>2.0.46</version>
    </dependency>

示例:判断是新开户还是二次业务

方式一为 !!CUST_CODE
当CUST_CODE为大于0的字符串时返回true
当CUST_CODE为null或者"" 返回false
当CUST_CODE这个key不存在时抛出异常 No such property: CUST_CODE for class
方式二为 !CUST_CODE
当CUST_CODE为大于0的字符串时返回false
当CUST_CODE为null或者"" 返回true
当CUST_CODE这个key不存在时抛出异常 No such property: CUST_CODE for class

不要使用!CUST_CODE或者!!CUST_CODE,因为会抛出异常 No such property: CUST_CODE for class

([null,""].contains(binding.getVariables()?.CUST_CODE)==true) 新开户
([null,""].contains(binding.getVariables()?.CUST_CODE)==false) 二次业务
public class Test {
    /**
     * CUST_CODE="1234"的场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * CUST_CODE这个key不存在的场景
     * {
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_CODE=""的场景
     * {
     * "CUST_CODE": "",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test3() {
        String acceptParam = "{\"CUST_CODE\":\"\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_CODE=null的场景
     * 判断CUST_CODE这个key是否存在
     */
    private void test4() {
        java.util.Map bindingData = new java.util.HashMap();
        bindingData.put("CUST_CODE", null);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 空对象
     * {}
     */
    private void test5() {
        String acceptParam = "{}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 对象为null
     */
    private void test6() {
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    String scriptText = "![null,\"\"].contains(binding.getVariables()?.CUST_CODE)";

    /**
     * [null,""].contains(binding.getVariables()?.CUST_CODE) 返回true代表新开户,返回false代表二次业务
     * ![null,""].contains(binding.getVariables()?.CUST_CODE) 返回true代表二次业务,返回false代表新开户
     */
    public static void main(String[] args) {
        new Test().test1();
        new Test().test2();
        new Test().test3();
        new Test().test4();
        new Test().test5();
        new Test().test6();
    }
}

示例:判断儿子对象的孙子对象是否存在某个属性

public class Test {
    /**
     * CUST_INFO.BASIC_INFO.OP_TYPE="0" 场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO.OP_TYPE=""场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO.OP_TYPE=null场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": null,
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test3() {
        java.util.Map BASIC_INFO = new java.util.HashMap();
        BASIC_INFO.put("OP_TYPE", null);
        java.util.Map CUST_INFO = new java.util.HashMap();
        CUST_INFO.put("BASIC_INFO", BASIC_INFO);
        java.util.Map bindingData = new java.util.HashMap();
        bindingData.put("CUST_INFO", CUST_INFO);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO中不存在OP_TYPE这个key
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test4() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO中不存在BASIC_INFO这个key
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {}
     * }
     */
    private void test5() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1"
     * }
     */
    private void test6() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\"}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 空对象
     * {}
     */
    private void test7() {
        String acceptParam = "{}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 对象为null
     */
    private void test8() {
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    String scriptText = "binding.getVariables()?.CUST_INFO?.BASIC_INFO!=null && CUST_INFO.BASIC_INFO.containsKey(\"OP_TYPE\")";

    /**
     * 判断儿子对象的孙子对象是否存在某个属性
     * 判断JSON中是否包含CUST_INFO.BASIC_INFO.OP_TYPE这个key
     * key不存在,返回false
     * key="",返回true
     * key="xxx",返回true
     * key=null,返回true
     */
    public static void main(String[] args) {
        new Test().test1();
        new Test().test2();
        new Test().test3();
        new Test().test4();
        new Test().test5();
        new Test().test6();
        new Test().test7();
        new Test().test8();
    }
}

示例:判断CUST_INFO.BASIC_INFO.DIFF_INFO列表中是否存在某个对象的FIELD=USER_NAME,或者某个对象的FIELD=AGE,存在任何一个就返回true,都不存在就返回false

public class Test {
    /**
     * USER_NAME/AGE都存在于CUST_INFO.BASIC_INFO.DIFF_INFO列表中
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * },
     * {
     * "FIELD": "ADDRESS",
     * "OLD": "北京",
     * "NEW": "上海"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99},{\"FIELD\":\"ADDRESS\",\"OLD\":\"北京\",\"NEW\":\"上海\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * 只有AGE存在于CUST_INFO.BASIC_INFO.DIFF_INFO列表中
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * },
     * {
     * "FIELD": "ADDRESS",
     * "OLD": "北京",
     * "NEW": "上海"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99},{\"FIELD\":\"ADDRESS\",\"OLD\":\"北京\",\"NEW\":\"上海\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * USER_NAME/AGE都不存在于CUST_INFO.BASIC_INFO.DIFF_INFO列表中
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "ADDRESS",
     * "OLD": "北京",
     * "NEW": "上海"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test3() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"ADDRESS\",\"OLD\":\"北京\",\"NEW\":\"上海\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO.DIFF_INFO列表为空
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": []
     * }
     * }
     * }
     */
    private void test4() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO.DIFF_INFO不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0"
     * }
     * }
     * }
     */
    private void test5() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\"}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {}
     * }
     */
    private void test6() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1"
     * }
     */
    private void test7() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\"}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 空对象
     * {}
     */
    private void test8() {
        String acceptParam = "{}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 对象为null
     */
    private void test9() {
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    String scriptText = "binding.getVariables()?.CUST_INFO?.BASIC_INFO?.DIFF_INFO?.find{[\"USER_NAME\",\"AGE\"].contains(it.FIELD)}!=null";
    /**
     * 判断CUST_INFO.BASIC_INFO.DIFF_INFO列表中是否存在某个对象的(FIELD=USER_NAME或者AGE),存在任何一个就返回true,都不存在就返回false
     */
    public static void main(String[] args) {
        new Test().test1();
        new Test().test2();
        new Test().test3();
        new Test().test4();
        new Test().test5();
        new Test().test6();
        new Test().test7();
        new Test().test8();
        new Test().test9();
    }
}

示例:判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1

public class Test {
    /**
     * 判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99},{\"FIELD\":\"ADDRESS\",\"OLD\":\"北京\",\"NEW\":\"上海\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        String scriptText = "[\"0\",\"1\"].contains(CUST_INFO?.BASIC_INFO?.OP_TYPE)";
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * 判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "3",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"3\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        String scriptText = "[\"0\",\"1\"].contains(CUST_INFO?.BASIC_INFO?.OP_TYPE)";
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * }
     * ]
     * }
     * }
     * }
     */
    private void test3() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        String scriptText = "[\"0\",\"1\"].contains(CUST_INFO?.BASIC_INFO?.OP_TYPE)";
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {}
     * }
     */
    private void test4() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        String scriptText = "[\"0\",\"1\"].contains(CUST_INFO?.BASIC_INFO?.OP_TYPE)";
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 判断CUST_INFO.BASIC_INFO.OP_TYPE的值必须是0或1
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1"
     * }
     * 终极解决方案:(1)判断根元素是否存在 (2)判断子属性是否等于0或者1,如果子属性不存在则为null,刚好符合规则,返回false
     */
    private void test5() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\"}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        String scriptText = "binding.hasVariable(\"CUST_INFO\") && [\"0\",\"1\"].contains(CUST_INFO?.BASIC_INFO?.OP_TYPE)";
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    public static void main(String[] args) {
        new Test().test5();
    }
}

示例:断是否修改了CUST_INFO.BASIC_INFO模块,返回true代表有修改,返回false代表没有修改

public class Test {
    /**
     * CUST_INFO.BASIC_INFO模块的DIFF_INFO被人修改了的场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "1",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"1\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO模块的DIFF_INFO空
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "1",
     * "DIFF_INFO": []
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"1\",\"DIFF_INFO\":[]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO模块的DIFF_INFO不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "1"
     * }
     * }
     * }
     */
    private void test3() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"1\"}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO.BASIC_INFO模块不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {}
     * }
     */
    private void test4() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * CUST_INFO模块不存在
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1"
     * }
     */
    private void test5() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\"}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 空对象
     * {}
     */
    private void test6() {
        String acceptParam = "{}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 对象为null
     */
    private void test7() {
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    //String scriptText = "binding.getVariables()?.CUST_INFO?.BASIC_INFO?.DIFF_INFO!=null && CUST_INFO.BASIC_INFO.DIFF_INFO.size()>0";
    String scriptText = "binding.getVariables()?.CUST_INFO?.BASIC_INFO?.DIFF_INFO?.size()>0";
    /**
     * 如何判断是否修改了CUST_INFO.BASIC_INFO模块,返回true代表有修改,返回false代表没有修改
     */
    public static void main(String[] args) {
        new Test().test1();
        new Test().test2();
        new Test().test3();
        new Test().test4();
        new Test().test5();
        new Test().test6();
        new Test().test7();
    }
}

示例:判断USER_TYPE是否为1

public class Test {
    /**
     * USER_TYPE="1"的场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "1",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test1() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"1\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * USER_TYPE="2"的场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "2",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test2() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"2\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 true
        System.out.println(result);
    }

    /**
     * USER_TYPE=""的场景
     * {
     * "CUST_CODE": "1234",
     * "USER_TYPE": "",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test3() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"USER_TYPE\":\"\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * USER_TYPE=null的场景
     */
    private void test4() {
        java.util.Map bindingData = new java.util.HashMap();
        bindingData.put("USER_TYPE", null);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * USER_TYPE这个key不存在
     * {
     * "CUST_CODE": "1234",
     * "CUST_INFO": {
     * "BASIC_INFO": {
     * "OP_TYPE": "0",
     * "DIFF_INFO": [
     * {
     * "FIELD": "USER_NAME",
     * "OLD": "张三",
     * "NEW": "李四"
     * },
     * {
     * "FIELD": "AGE",
     * "OLD": 18,
     * "NEW": 99
     * }
     * ]
     * }
     * }
     * }
     */
    private void test5() {
        String acceptParam = "{\"CUST_CODE\":\"1234\",\"CUST_INFO\":{\"BASIC_INFO\":{\"OP_TYPE\":\"0\",\"DIFF_INFO\":[{\"FIELD\":\"USER_NAME\",\"OLD\":\"张三\",\"NEW\":\"李四\"},{\"FIELD\":\"AGE\",\"OLD\":18,\"NEW\":99}]}}}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 空对象
     * {}
     */
    private void test6() {
        String acceptParam = "{}";
        java.util.Map bindingData = com.alibaba.fastjson2.JSON.parseObject(acceptParam, java.util.Map.class);
        groovy.lang.Binding binding = new groovy.lang.Binding(bindingData);
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        script.setBinding(binding);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    /**
     * 对象为null
     */
    private void test7() {
        groovy.lang.GroovyShell shell = new groovy.lang.GroovyShell();
        groovy.lang.Script script = shell.parse(scriptText);
        Object result = script.run();
        //打印 false
        System.out.println(result);
    }

    String scriptText = "binding.getVariables()?.USER_TYPE==\"1\"";

    /**
     * 判断USER_TYPE是否为1
     * "1"==binding.getVariables()?.USER_TYPE 返回true代表成立
     */
    public static void main(String[] args) {
        new Test().test1();
        new Test().test2();
        new Test().test3();
        new Test().test4();
        new Test().test5();
        new Test().test6();
        new Test().test7();
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgm625637391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值