Sping-Boot Config:如何在yaml键中保留空格,以用于填充Map <String,String>

时间:2019-09-04 21:15:04

标签: spring-boot yaml snakeyaml

假设我们有一个配置属性类:

@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;
    }
}

,我们尝试使用包含空格的密钥对其进行配置:

whitespace.test.configs:
  Key With Whitespace: "I am a value with whitespace in it"

似乎通过spring可以很好地解析此yaml,并且显然是有效的yaml。但是,spring(SnakeYaml?)会删除Key字符串中的空格:

KeyWithWhitespace -> I am a value with whitespace in it

一个简单的解决方案是为空间指定一个特殊字符并在应用程序中替换它,但是我想知道spring是否已经以某种方式处理了这个问题?也许有一种方法可以逃避配置中的空间,使得spring(SnakeYaml?)知道我们要保留它,或者有办法配置它?

出于完整性考虑,我尝试使用单引号和双引号以及\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}

在示例中,空格保留在键中。不幸的是,我对于弄清楚空白实际上从何处被删除一无所知。

2 个答案:

答案 0 :(得分:4)

对于具有特殊字符的地图键,您需要将其用'[]'括起来,以便按指定方式使用该键。

因此,您的情况将是

whitespace.test.configs:
  '[Key With Whitespace]': "I am a value with whitespace in it"

答案 1 :(得分:0)

新的资料夹对属性名称更加严格,这意味着您需要将它们括在方括号中。请尝试以下操作:

Reportpath