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

bti*_*nay 5 yaml snakeyaml spring-boot

我有一个YAML配置文件,其中包含属性映射:

properties:
  a.b.c: 1
Run Code Online (Sandbox Code Playgroud)

Boot将解析为:

{a:{b:{c:1}}}
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是:

{'a.b.c': 1}
Run Code Online (Sandbox Code Playgroud)

反正有没有把它哄进"通过"键模式?引用密钥似乎没有帮助.


更新

下面的实际例子.

Java的

import static com.google.common.collect.Maps.newLinkedHashMap;

import java.util.Map;
import javax.annotation.PostConstruct;

import lombok.Data;
import lombok.val;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties("hadoop")
public class HadoopProperties {

   private Map<Object, Object> properties = newLinkedHashMap();

}
Run Code Online (Sandbox Code Playgroud)

YAML

application.yml:

hadoop:
   properties:
      fs.defaultFS: hdfs://localhost:8020
      mapred.job.tracker: localhost:8021
Run Code Online (Sandbox Code Playgroud)

结果

调用toString()生成的对象:

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

Dav*_*yer 3

我懂了。这是因为您绑定到一个非常通用的对象,因此 Spring Boot 认为您的句点分隔符是映射键取消引用。如果绑定到 Map 或 Properties 会发生什么?