如何在YAML中为POJO定义Map?

2023/05/12

1. 概述

在本教程中,我们将介绍如何使用YAML文件中定义的属性来配置POJO类中的Map值。

2. POJO和YAML

POJO类是普通的旧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;
	}

	// getters and setters..
}

注意带有prefix值的@ConfigurationProperties注解,我们将在YAML文件中的相同根值下定义我们的Map,正如我们在下一节中看到的那样。

我们还需要记住在我们的Spring Boot应用程序主类上使用以下注解启用配置属性:

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

2.2 YAML配置

现在我们添加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属性将自动转换为代码中的驼峰式大小写等效项。

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的Map:

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

3. 总结

在本文中,我们了解了如何在YAML配置文件中为简单的POJO定义简单和更复杂的嵌套Map。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章