首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Spel表达式中,我们可以在一行中计算多个表达式吗?就像ExpressionFactory一样

在Spel表达式中,我们可以在一行中计算多个表达式吗?就像ExpressionFactory一样
EN

Stack Overflow用户
提问于 2021-09-21 10:58:51
回答 1查看 216关注 0票数 0

ExpressionFactory必须能够处理expression参数的以下类型的输入:

使用相同分隔符(例如${employee.firstName}${employee.lastName}#{employee.firstName}#{employee.lastName})的多个表达式。

我们可以用类似的方法在java SPEL中计算多个表达式吗?

我尝试了以下几种方法

代码语言:javascript
运行
复制
Expression expressionMulti = parser.parseExpression( "#{#jsonPath(#jsonDataObject,'$.customData.price')}#{#jsonPath(#jsonDataObject,'$.previousResponse')}");

获取错误

代码语言:javascript
运行
复制
Exception in thread "main" org.springframework.expression.spel.SpelParseException: Expression [#{#jsonPath(#jsonDataObject,'$.customData.price')}#{#jsonPath(#jsonDataObject,'$.previousResponse')}] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lcurly({)'

我也尝试过不使用分隔符。

代码语言:javascript
运行
复制
Expression expressionMulti = parser.parseExpression( "#jsonPath(#jsonDataObject,'$.customData.price')#jsonPath(#jsonDataObject,'$.previousResponse')");
代码语言:javascript
运行
复制
Exception in thread "main" org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'hash(#)'
EN

回答 1

Stack Overflow用户

发布于 2021-09-21 14:13:56

SpEL只不过是常规Java的语法糖而已。因此,您需要开始考虑它的定义,就像使用常规Java代码一样。因此,请考虑将表达式重写为Java代码,然后逐段转到SpEL。

另一方面,如果您的逻辑如此复杂,请考虑提取一些static实用程序方法,这些方法可以通过T运算符https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#expressions-types从SpEL中使用。

相同的#jsonPath()JsonPathUtils.evaluate()之上的SpEL函数,您可以直接在您自己的static方法中使用它。该实现确实可以使用SpelExpressionParser来计算这些嵌套的动态表达式。顶部的表达式将使用这些参数调用您的静态方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69267717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档