如何在YAML中为POJO中Map配置数据? | Baeldung

banq


介绍如何使用YAML文件中定义的属性为POJO类中Map对象配置值数据。
POJO类是普通的旧Java对象。YAML是一种人类可读的结构化数据格式,它使用缩进来指示嵌套。
假设我们正在运营一个在线商店,并且正在创建一个可以有服装尺寸的服务。首先,“ S”,“ M”,“ L”等标签所指的英国尺寸。创建POJO配置类:
@ConfigurationProperties(prefix = "t-shirt-size")
public class TshirtSizeConfig {
 
    private Map<String, Integer> simpleMapping;
 
    public TshirtSizeConfig(Map<String, Integer> simpleMapping) {
        this.simpleMapping = simpleMapping;
    }
    
    //getters and setters..
}

注意带有前缀值的@ConfigurationProperties。我们将在YAML文件中的相同根值下定义映射。

还需要记住在Application.class上启用带有以下注释的配置属性:
@EnableConfigurationProperties(TshirtSizeConfig.class)
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

现在,我们添加t-shirt-size到我们的YAML配置。在application.yml文件中使用以下结构:

t-shirt-size:
  simple-mapping:
    XS: 6
    S:  8
    M:  10
    L:  12
    XL: 14

注意缩进和空格。YAML使用缩进来表示嵌套。对于每个嵌套级别,建议的语法是两个空格。
请注意,我们使用的是simple-mapping带有破折号,但我们在类中的属性名称称为simpleMapping。带有破折号的YAML属性将自动转换为等效的驼峰式代码。

使用更复杂的Map来更改application.yml:
t-shirt-size:
  complex-mapping:
    XS:
      uk: 6
      fr: 34
      us: 2
    S:
      uk: 8
      fr: 36
      us: 4
    M:
      uk: 10
      fr: 38
      us: 6
    L:
      uk: 12
      fr: 40
      us: 8
    XL:
      uk: 14
      fr: 42
      us: 10


的POJO中的相应字段将是Map中Map:

private Map<String, Map<String, Integer>> complexMapping;

在GitHub上获得本文的代码