Spring-Boot 配置:如何在用于填充 Map<String, String> 的 yaml 密钥中保留空格
Sping-Boot Config: How to keep whitespace in yaml key being used to populate Map<String, String>
假设我们有一个配置属性 class:
@ConfigurationProperties(prefix = "whitespace.test")
public class WhitespaceTestConfig {
private Map<String, String> configs;
public Map<String, String> getConfigs() {
return configs;
}
public void setConfigs(Map<String, String> configs) {
this.configs = configs;
}
}
我们尝试使用包含 space 的密钥对其进行配置:
whitespace.test.configs:
Key With Whitespace: "I am a value with whitespace in it"
似乎通过 spring 可以很好地解析这个 yaml,而且它显然是有效的 yaml。但是,spring (SnakeYaml?) 删除了 Key 字符串中的 spaces:
KeyWithWhitespace -> I am a value with whitespace in it
一个简单的解决方案是为 space 指定一个特殊字符并在应用程序中替换它,但我想知道 spring 是否已经以某种方式处理了这个问题?也许有一种方法可以在配置中以 spring (SnakeYaml?) 知道我们想要保留它的方式转义 space,或者也许有一种方法可以配置它?
为了完整起见,我尝试使用单引号和双引号以及 \s
\b
.
更新:
经过一些额外的研究,我从 SnakeYaml 存储库中找到了一个示例,它似乎表明我正在寻找的东西应该是可能的:https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-block-mappings
具体这个例子:
# YAML
base armor class: 0
base damage: [4,4]
plus to-hit: 12
plus to-dam: 16
plus to-ac: 0
# Java
{'plus to-hit': 12, 'base damage': [4, 4], 'base armor class': 0, 'plus to-ac': 0, 'plus to-dam': 16}
在示例中,spaces 保留在键中。不幸的是,我不知道白色 space 实际被移除的位置。
对于带有特殊字符的地图键,您需要用 '[]'
将键括起来,以便按指定使用键。
因此,在您的情况下它将是
whitespace.test.configs:
'[Key With Whitespace]': "I am a value with whitespace in it"
新活页夹对 属性 名称更加严格,这意味着您需要将它们括在方括号中。请尝试以下操作:
shiro:
testMap:
"[/test1]": test1
"[/test2]": test2
假设我们有一个配置属性 class:
@ConfigurationProperties(prefix = "whitespace.test")
public class WhitespaceTestConfig {
private Map<String, String> configs;
public Map<String, String> getConfigs() {
return configs;
}
public void setConfigs(Map<String, String> configs) {
this.configs = configs;
}
}
我们尝试使用包含 space 的密钥对其进行配置:
whitespace.test.configs:
Key With Whitespace: "I am a value with whitespace in it"
似乎通过 spring 可以很好地解析这个 yaml,而且它显然是有效的 yaml。但是,spring (SnakeYaml?) 删除了 Key 字符串中的 spaces:
KeyWithWhitespace -> I am a value with whitespace in it
一个简单的解决方案是为 space 指定一个特殊字符并在应用程序中替换它,但我想知道 spring 是否已经以某种方式处理了这个问题?也许有一种方法可以在配置中以 spring (SnakeYaml?) 知道我们想要保留它的方式转义 space,或者也许有一种方法可以配置它?
为了完整起见,我尝试使用单引号和双引号以及 \s
\b
.
更新:
经过一些额外的研究,我从 SnakeYaml 存储库中找到了一个示例,它似乎表明我正在寻找的东西应该是可能的:https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-block-mappings
具体这个例子:
# YAML
base armor class: 0
base damage: [4,4]
plus to-hit: 12
plus to-dam: 16
plus to-ac: 0
# Java
{'plus to-hit': 12, 'base damage': [4, 4], 'base armor class': 0, 'plus to-ac': 0, 'plus to-dam': 16}
在示例中,spaces 保留在键中。不幸的是,我不知道白色 space 实际被移除的位置。
对于带有特殊字符的地图键,您需要用 '[]'
将键括起来,以便按指定使用键。
因此,在您的情况下它将是
whitespace.test.configs:
'[Key With Whitespace]': "I am a value with whitespace in it"
新活页夹对 属性 名称更加严格,这意味着您需要将它们括在方括号中。请尝试以下操作:
shiro:
testMap:
"[/test1]": test1
"[/test2]": test2