2017-05-14 64 views
0

我想用SpEL來評估一些謂詞。由於值/屬性是動態的,我沒有特定的bean類。因此,我們有一個HashMap其中(根據機應用狀態)的按鍵映射到不同的POJO /豆類,如:彈簧表達式語言地圖

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找到

的你有建議嗎?

回答

0

由於地圖用於setVariables(),您需要#person.age > 21,因爲person是一個變量。

或者您可以將地圖設置爲上下文的根對象。

context.setRootObject(model); 

還是算了上下文和根對象傳遞給評價

expression.getValue(model, Boolean.class); 
+0

的#做到了。 如果沒有上下文不起作用(拋出一個「屬性不能在類型爲'java.util.HashMap'的對象上找到 - 也許不是公開的例外) – Indivon

+0

啊 - 你需要一個帶有MapAccessor的評估上下文它的propertyAccessors。 –