spring 表达式语言的映射
Map for spring expression language
我想使用 SpEL 来评估一些谓词。由于 values/properties 是动态的,我没有特定的 bean class。因此,我们有一个 hashmap,其中(根据应用程序状态)键映射到不同的 POJOs/beans,例如:
Person person = new Person();// a person instance
person.setAge(25) // e.g. property age
Map<String, Object> model = new HashMap<>();
model.put("person", person);
// and others ...
我们希望通过设置变量来为此使用评估上下文,例如:
String predicate = "person.age>21";
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariables(model);
Expression expression = expressionParser.parseExpression(predicate);
boolean result = expression.getValue(context, Boolean.class);
但这会引发异常:
SpelEvaluationException: EL1007E:(pos 0): 属性 或在 null
上找不到字段 'person'
有人给点建议吗?
由于在 setVariables()
中使用了地图,因此您需要 #person.age > 21
,因为 person
是一个变量。
或者您可以将地图设置为上下文的根对象。
context.setRootObject(model);
或者忘记上下文,将根对象传递给求值
expression.getValue(model, Boolean.class);
我想使用 SpEL 来评估一些谓词。由于 values/properties 是动态的,我没有特定的 bean class。因此,我们有一个 hashmap,其中(根据应用程序状态)键映射到不同的 POJOs/beans,例如:
Person person = new Person();// a person instance
person.setAge(25) // e.g. property age
Map<String, Object> model = new HashMap<>();
model.put("person", person);
// and others ...
我们希望通过设置变量来为此使用评估上下文,例如:
String predicate = "person.age>21";
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariables(model);
Expression expression = expressionParser.parseExpression(predicate);
boolean result = expression.getValue(context, Boolean.class);
但这会引发异常:
SpelEvaluationException: EL1007E:(pos 0): 属性 或在 null
上找不到字段 'person'有人给点建议吗?
由于在 setVariables()
中使用了地图,因此您需要 #person.age > 21
,因为 person
是一个变量。
或者您可以将地图设置为上下文的根对象。
context.setRootObject(model);
或者忘记上下文,将根对象传递给求值
expression.getValue(model, Boolean.class);