如何在 YAML 文件中为简单的 POJO 定义映射?

Posted

技术标签:

【中文标题】如何在 YAML 文件中为简单的 POJO 定义映射?【英文标题】:How to define a map in a YAML file for simple POJO? 【发布时间】:2016-03-23 13:50:28 【问题描述】:

我正在使用snakeYaml 将某些配置/属性值解析为配置对象。

我的 yaml 文件看起来像这样 -

#Thread
batchLimit: 1000
threadCountLimit: 2

#Some More Config
key: value

#MAP
keyMapping: <What goes here?>

我的配置类看起来像这样 -

public class Configuration
  int batchlimit;
  int threadCountLimit;
  ...
  Map<String,String> keyMapping;

如何在 YAML 文件中定义 keyMapping 以便它直接通过 SnakeYAML 读取?

【问题讨论】:

【参考方案1】:

下面是它的样子:

#MAP
keyMapping: 
    key1: value1
    key2: value2

通常 YAML 格式自然支持键值对。 看看下面的教程(只是举例):https://github.com/Animosity/CraftIRC/wiki/Complete-idiot's-introduction-to-yaml

或者只是谷歌“yaml map”了解更多详情。

【讨论】:

非常感谢。甚至没有想过要尝试这个。得到奇怪的结果,比如使用“?”用于键和 ':' 用于值。你节省了我很多时间 我也用谷歌搜索了 yml 地图并最终来到了这里。只是在链接中输入未来的想法,或者停止输入......当你领先时。这是一个非常好的答案。 :)【参考方案2】:

带有键值对的 Yaml 文件“AppParams.yml”:

someConfig:
    key1: value1
    key2: value2

POJO:

public class ApplicationParameters 
    private Map<String, String> someConfig;

    public ApplicationParameters() 
    

    public Map<String, String> getSomeConfig() 
        return someConfig;
    

    public void setSomeConfig(Map<String, String> someConfig) 
        this.someConfig = someConfig;
    

读者:

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
File paramFile = new File("AppParams.yml");
ApplicationParameters applicationParameters = mapper.readValue(paramFile, ApplicationParameters.class);

Map<String, String> someConfig = applicationParameters.getSomeConfig();

String key1Value = someConfig.get("key1");    //returns "value1"

上面的例子在 POM.xml 中使用了这些依赖:

 <dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>

【讨论】:

以上是关于如何在 YAML 文件中为简单的 POJO 定义映射?的主要内容,如果未能解决你的问题,请参考以下文章

从 POJO 到 Record 的 jOOQ 映射器

在Jackson的单个文件中反序列化来自多个YAML文档的POJO

spring boot yaml 自定义配置 映射到 java POJO

mybatis 映射器

mybatis之映射器

如何在 Retrofit 库中将 YAML 响应正文解析为 POJO?