在 YAML 中定义 POJO 中的 Map 属性
1、概览
本文将带你了解如何在 YAML 配置文件中定义 POJO 类中的 Map 属性。
2、POJO 和 YAML
POJO 即 Plain Old Java Objects(普通旧 Java 对象)。YAML 是一种人类可读的结构化数据格式,使用缩进表示嵌套。
2.1、简单的 Map
假设我们正在经营一家网店,并且要创建一个服装尺码转换的服务。起初,我们只销售英国的服装。我们想知道标签 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;
}
//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