Java spring表达式语言的映射

Java spring表达式语言的映射,java,spring,spring-el,Java,Spring,Spring El,我想用SpEL来计算一些谓词。由于值/属性是动态的,所以我没有特定的bean类。因此,我们有一个hashmap,其中(根据应用程序状态)键映射到不同的POJO/Bean,例如: Person person = new Person();// a person instance person.setAge(25) // e.g. property age Map<String, Object> model = new HashMap<>(); model.put("per

我想用SpEL来计算一些谓词。由于值/属性是动态的,所以我没有特定的bean类。因此,我们有一个hashmap,其中(根据应用程序状态)键映射到不同的POJO/Bean,例如:

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 ... 
但这引发了一个例外:

SpelEvaluationException:EL1007E:(位置0):在null上找不到属性或字段“person”


有人需要建议吗?

由于映射用于
setVariables()
,您需要
#person.age>21
,因为
person
是一个变量

或者可以将映射设置为上下文的根对象

context.setRootObject(model);
或者忘记上下文并将根对象传递给求值

expression.getValue(model, Boolean.class);

警察做到了。如果没有上下文,则无法工作(抛出“在类型为'java.util.HashMap'的对象上找不到属性”-可能不是公共的“异常”)啊-对-您需要一个计算上下文,并在其属性Accessor中添加
MapAccessor
expression.getValue(model, Boolean.class);