如何防止Spring Boot用点解析YAML键

如何防止Spring Boot用点解析YAML键,yaml,spring-boot,snakeyaml,Yaml,Spring Boot,Snakeyaml,我有一个带有属性映射的YAML配置文件: 属性: a、 不列颠哥伦比亚省:1 Boot会将其解析为: {a:{b:{c:1}} 然而,我想要的是: {'a.b.c':1} 是否有办法将其引导至“通过”键模式?引用密钥似乎没有帮助 更新 下面是一个实际例子 JAVA import static com.google.common.collect.Maps.newLinkedHashMap; 导入java.util.Map; 导入javax.annotation.PostConstruct;

我有一个带有属性映射的YAML配置文件:

属性:
a、 不列颠哥伦比亚省:1
Boot会将其解析为:

{a:{b:{c:1}}
然而,我想要的是:

{'a.b.c':1}
是否有办法将其引导至“通过”键模式?引用密钥似乎没有帮助


更新 下面是一个实际例子

JAVA
import static com.google.common.collect.Maps.newLinkedHashMap;
导入java.util.Map;
导入javax.annotation.PostConstruct;
导入龙目数据;
进口lombok.val;
导入org.springframework.boot.context.properties.ConfigurationProperties;
导入org.springframework.context.annotation.Configuration;
@资料
@配置
@配置属性(“hadoop”)
公共类Hadoop属性{
私有映射属性=newLinkedHashMap();
}
亚马尔
application.yml

hadoop: 特性: 财政司司长:hdfs://localhost:8020 mapred.job.tracker:localhost:8021 结果 对结果对象调用
toString()

HadoopProperties(properties={fs={defaultFS=hdfs://localhost:8020},mapred={job={tracker=localhost:8021}}})


我明白了。这是因为您绑定到一个非常通用的对象,所以Spring Boot认为您的周期分隔符是映射键解引用。如果绑定到地图或属性,会发生什么情况?

您可以按如下方式使用

hadoop:
   properties:
      "[fs.defaultFS]" : hdfs://localhost:8020
      "[mapred.job.tracker]": localhost:8021

参考-

我不确定您在哪里看到
{a:{b:{c:1}}
。在Spring Boot中,YAML的正常使用将其扁平化为
Properties
,因此其深度仅为一级。你能展示一些代码吗?@DaveSyer更新后添加了实际的代码示例我明白了。这是因为您绑定到一个非常通用的对象,所以Spring Boot认为您的周期分隔符是映射键解引用。如果绑定到
映射
属性
,会发生什么情况?@DaveSyer似乎可以使用
映射
,但不能使用
属性
。谢谢你的指点!我看到了同样的问题,但我已经有了地图,仍然有问题。