当前位置: 首页 > 知识库问答 >
问题:

spring表达式语言的映射

蒋高超
2023-03-14

我想使用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 ... 

我们希望通过设置变量来使用评估上下文,比如:

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:(位置0):在null上找不到属性或字段“person”

有人给我建议吗?

共有1个答案

晏志明
2023-03-14

由于映射用于setVariables(),因此需要#person。年龄

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

context.setRootObject(model);

或者忘记上下文并将根对象传递给评估

expression.getValue(model, Boolean.class);

 类似资料:
  • 本文章将介绍Thymeleaf Spring表达式语法中的概念。 Spring Expression Language(简称SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象图。 语言语法类似于Unified EL,但提供了额外的功能,特别是方法调用和基本的字符串模板功能。 Spring表达式语言的创建旨在为Spring社区提供单一支持的表达式语言。 它的语言特性是由Spring项目中的

  • 主要内容:示例,SpEL对Bean定义的支持,SpEL中的运算符,SpEL中的变量Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。 Java 有许多可用的表达式语言,例如 JSP EL,OGNL,MVEL 和 JBoss EL,SpEL 语法类似于 JSP EL,功能类似于 Struts2 中的 OGNL,能在运行时构建复杂表达式、存取

  • JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。 一个简单的语法 典型的,当您需要在JSP标签中指定一个属性值时,只需要简单地使用字符串即可: <jsp:setProperty name="box" propert

  • 我正在使用带咖啡因缓存的Spring boot。我的缓存键是一个长的,我需要这个键,例如:“1234-RULE”,其中1234是长对象,-RULE只是一个后缀。我尝试了以下方法来实现这一点: 调试时,我发现错误: 我的规则。id很长,我用来表示id和后缀的表达式似乎不正确。你能告诉我如何在我的用例中使用长字符串吗。

  • Handlebars 表达式是 Handlebars 模板的基本单位。 您可以在 {{mustache}} 中单独使用它们或将它们用作 Handlebars 助手代码, 或将其用作 Hash 参数中的值。 基本用法 Handlebars 表达式是一些以双花括号 {{}} 括起来的内容。在以下的模版中,firstname 是一个被声明为表达式的变量,且被双花 括号括起来。template <p>{{