Как определить карту в файле YAML для простого POJO?

Я использую snakeYaml для анализа определенных значений конфигурации / свойств в объекте Configuration.

Мой файл 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;
}

Как мне определить keyMapping в файле YAML, чтобы он читался напрямую через SnakeYAML?


person frugalcoder    schedule 17.12.2015    source источник


Ответы (2)


Вот как это может выглядеть:

#MAP
keyMapping: 
    key1: value1
    key2: value2

Обычно формат YAML имеет естественную поддержку пар ключ-значение. Взгляните на следующий учебник (например): https://github.com/Animosity/CraftIRC/wiki/Complete-idiot

Или просто погуглите "yaml map" для получения более подробной информации.

person AlexR    schedule 17.12.2015
comment
Большое спасибо. Даже не подумал попробовать это. Получались странные результаты, например, при использовании "?" для ключей и ':' для значений. Вы сэкономили так много моего времени - person frugalcoder; 17.12.2015
comment
Я также погуглил карту yml и оказался здесь. Просто напишите ссылку на будущее или перестаньте печатать ..... Пока вы впереди. Это был действительно хороший ответ. :) - person PlickPlick; 29.11.2019

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>
person Māris Rubenis    schedule 11.05.2020