spring-boot - Spring-Boot 配置 : How to keep whitespace in yaml key being used to populate Map<String, 字符串>

标签 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;
    }
}

我们尝试使用包含空格的 key 对其进行配置:
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}

在这个例子中,空格仍然存在于键中。不幸的是,我对弄清楚空格实际上被删除的位置一无所知。

最佳答案

对于带有特殊字符的映射键,您需要用 '[]' 将键括起来用于按指定使用的 key 。

所以,在你的情况下,它将是

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

关于spring-boot - Spring-Boot 配置 : How to keep whitespace in yaml key being used to populate Map<String, 字符串>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57795723/

相关文章:

mysql - "YAML syntax error occurred while parsing config/database.yml"Ruby on Rails

java - 如何在Java中使用snake yaml序列化具有自定义名称的字段

java - 在 YAML 嵌套数据中搜索值

Spring Boot,Spring MVC webjars 依赖项返回 404

java - 如何在Spring Boot中实现单线程调度器?

yaml - 如何在 Pandoc 的前端指定编号部分?

yaml - ansible项目的ctags

mysql - @SqlResultSetMapping 不适用于日期字段

java - Spring Boot错误处理代码404空白页