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

以编程方式获取属性并使用SPEL对其进行计算

邹慈
2023-03-14
@Service
@Slf4j
public class Test {
    private String dynamicSPELStr = "#{${test.spel.map}.default}";

    @Autowired
    private Environment environment;
    void testSPEL() {
        ExpressionParser parser = new SpelExpressionParser();
        log.info("[PARSER] {}", parser
                .parseExpression(environment.resolvePlaceholders(dynamicSPELStr))
                .getValue());
    }
}
Expression [#{{default: '5', key1: '10', key2: '20', key3: '40'}.default}] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lcurly({)'

使用@value运行相同的表达式可以正常工作。

共有1个答案

越鸿才
2023-03-14

@value注释的value属性不是SpEL表达式。它支持使用${...}的占位符,并支持使用#{...}的SpEL表达式。

只有#{}之间的文本才是SpEL表达式。因此,从DynamicSpelStr字符串中删除#{}:

private String dynamicSPELStr = "${test.spel.map}.default";

错误解释

 类似资料:
  • #或$对我来说无关紧要 通常在Spring中,您可以将属性注入bean,我已经成功了。但是现在我希望用户输入一个模板字符串,可以使用应用程序上下文中的所有属性进行翻译。目前我不需要访问bean属性,但将来我可能需要。以上是定义文件夹路径时最常见场景的简化变体。运行时参数(例如,一天中的时间)增加的复杂性很小,但我问的问题是一步一步地工作。 因此,我试图在JUnit的帮助下,通过玩Spring表达式

  • 问题内容: 我正在使用NewtonSoft JObject解析JSON字符串。如何以编程方式从动态对象获取值?我想简化代码,以免对每个对象重复说明。 有什么办法可以将“ if”语句中的代码块提取到单独的方法中,例如: 甚至有可能因为我们不能对动态对象使用反射。还是我甚至正确使用了JObject? 谢谢。 问题答案: 假设您正在使用Newtonsoft.Json.Linq.JObject,则不需要使

  • 问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起

  • 我如何以编程方式验证Google?既然ClientLogin(https://developers.Google.com/accounts/docs/authforinstalledApps)已被否决,那么我们如何使用OAuth2对Google执行编程身份验证呢? 使用ClientLogin,我们可以使用电子邮件和密码参数执行到https://www.google.com/accounts/Cli

  • 问题内容: 我们使用下面的代码从属性文件中注入具有属性的Spring bean。 有没有一种方法可以通过编程方式访问属性?我试图做一些没有依赖注入的代码。所以我只想要一些这样的代码: 问题答案: 怎么样?

  • 问题内容: 我在映射中有一个与预先加载的集合的关联(lazy =“ false” fetch =“ subselect”)。进行查询时,如何使用Hibernate以编程方式将其关闭? 问题答案: 实际上,这应该是相反的。您可以在映射中将其关闭,并在特定用例中通过查询中的“提取”来激活它。 这就是Hibernate团队看到它的方式。Hibernate中无法创建为属性指定“ no-fetch”的请求…