在 YAML 中定义 POJO 中的 Map 属性

1、概览

本文将带你了解如何在 YAML 配置文件中定义 POJO 类中的 Map 属性。

2、POJO 和 YAML

POJO 即 Plain Old Java Objects(普通旧 Java 对象)。YAML 是一种人类可读的结构化数据格式,使用缩进表示嵌套。

2.1、简单的 Map

假设我们正在经营一家网店,并且要创建一个服装尺码转换的服务。起初,我们只销售英国的服装。我们想知道标签 SML 等代表的是英国的哪个尺码。

创建 POJO 配置类:

@ConfigurationProperties(prefix = "t-shirt-size")
public class TshirtSizeConfig {

    private Map<String, Integer> simpleMapping;

    public TshirtSizeConfig(Map<String, Integer> simpleMapping) {
        this.simpleMapping = simpleMapping;
    }
    
    //get、set
}

注意 @ConfigurationProperties 注解的 prefix 值表示配置前缀,在下一章会定义该配置。

还要在 Application.class 上使用以下注解启用配置属性类:

@EnableConfigurationProperties(TshirtSizeConfig.class)
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2.2、YAML 配置

现在,在 application.yml 配置中添加 t-shirt-size 配置,如下:

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

注意缩进和空格。YAML 使用缩进表示嵌套。推荐的语法是每个嵌套层使用两个空格。

注意,POJO 属性名称使用的是带有破折号的属性名称:simple-mapping,但我们类中的属性名称却叫 simpleMapping。带有破折号的 YAML 属性在代码中会自动转换为驼峰字母大写的对应属性。

2.3、复杂的 Map

现在需要考虑将尺码翻译成其他国家的尺码。例如,我们现在想知道 S 在法国和美国是什么尺码。

需要在 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

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

3、总结

本文介绍了如何在 YAML 配置文件中为 POJO 对象定义简单和复杂的 Map 属性映射。


Ref:https://www.baeldung.com/yaml-map-pojo