参考文献
正文
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();
}
}