【问题标题】:Is there a way to escape SpEL characters "#{" in a Spring property value有没有办法在 Spring 属性值中转义 SpEL 字符“#{”
【发布时间】:2019-12-20 22:42:08
【问题描述】:

我正在使用 Spring boot,并且在我的 application.yml 中有以下配置

apiKey: ${API_KEY}

API_KEY 是随机生成的,包含“#{”(如“sksjd#{lsd8”),表示 SpEL 表达式的开头 (https://docs.spring.io/spring/docs/4.3.10.RELEASE/spring-framework-reference/html/expressions.html#expressions-beandef)。这会导致 spring 尝试解释表达式,然后由于没有右括号而失败。

我希望字符串只按字面意思解释,我不想重新生成这个密钥,并尝试过:

apiKey: "${API_KEY}"

apiKey: '${API_KEY}'

apiKey: "#{'${API_KEY}'}"

apiKey: '#{"${API_KEY}"}'

更新: 我在一个依赖库中测试这些更改,结果发现我仍然在拉入库的主版本,而不是有更改的本地版本。

apiKey: "#{'${API_KEY}'}" 确实有效

【问题讨论】:

  • 当您在 Java 代码中使用 @Value("#{'${API_KEY}'}") 时,您确定这不起作用吗?我刚试过,我看到打印 sksjd#{lsd8 的值
  • 我只是在java代码中试过这个,它对我不起作用,我仍然得到No ending suffix '}' for expression
  • 你能添加完整的代码吗?我知道您在使用 "${API_KEY}" 时会收到此错误 No ending suffix '}' for expression starting,因为您在不使用 SpEL 的情况下直接引用该属性,但您不应该收到错误 @Value("#{'${API_KEY}'}"))

标签: spring spring-boot


【解决方案1】:

apiKey: "#{'${API_KEY}'}" 毕竟确实有效,Prakash 的回答也帮助我意识到为什么我尝试过的似乎没有任何效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 2011-10-04
    • 1970-01-01
    • 2023-01-05
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多