【问题标题】:Could not read properties if it contains dollar symbol (${var})如果属性包含美元符号 (${var}),则无法读取属性
【发布时间】:2017-09-15 13:44:39
【问题描述】:

我有以下内容的属性文件:

INVALID_ARGUMENT=Field ${fieldName} is invalid or missing.

我使用 spring 配置阅读了这篇文章:

@PropertySource("error_messages_en.properties")
@Configuration
public static class ErrorMessagesEn {
     @Value("${INVALID_ARGUMENT}")
    private String invalidArgument;
}

但应用程序启动后我看到:

Could not resolve placeholder 'fieldName' in value "Ïîëå ${fieldName} íåêîððåêòíî çàïîëíåíî èëè ïðîïóùåíî."

我需要${fieldName},因为我想使用repacer:https://stackoverflow.com/a/3655963/2674303

如何避免这个错误?

【问题讨论】:

  • 我不清楚您在哪里更改占位符。我想你错过了解释这部分。
  • @Mario Santini 我是用 java 代码做的。我用于此链接的库
  • 该链接是关于另一个答案的,并没有解释您如何在代码中使用它。
  • 我想将值读取到内容为 Field ${fieldName} 无效或缺失的字符串。 然后将 ${fieldName} 替换为值从运行时
  • 这能回答你的问题吗? Escape property reference in Spring property file

标签: java spring spring-boot template-engine properties-file


【解决方案1】:

您应该转义 ${fieldName},因为它没有被定义为 Spring 属性。

你可以看看这个问题:Escape property reference in spring property file 和相关的答案。

你应该这样写:

INVALID_ARGUMENT=Field #{'$'}{fieldName} is invalid or missing.

【讨论】:

  • 原因:java.lang.IllegalArgumentException:无法解析值“${INVALID_ARGUMENT}”中的占位符“INVALID_ARGUMENT”
  • 我已经测试过了,我没有产生这个问题。你确定它是链接的?如果您设置INVALID_ARGUMENT=foo,您是否也遇到了问题?
  • 看起来像编码问题,但我不确定
【解决方案2】:

如果您使用的是 yaml 文件,则需要用引号将值括起来

参数:“字段 #{'$'}{fieldName} 无效或缺失。”

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 2021-03-02
    • 1970-01-01
    • 2012-03-10
    • 2019-07-26
    • 2021-12-21
    • 1970-01-01
    • 2020-05-12
    • 2021-03-04
    相关资源
    最近更新 更多