Как прочитать YML-файл в Java-хэш-карту в dropwizard - PullRequest
0 голосов
/ 07 сентября 2018

В моем config.yml у меня есть такая конфигурация

myObject:
  key1: value1
  key2:value2
  key3: value3

Тогда у меня есть класс конфигурации Dropwizard как

public class MyObject {

String key1;
String value1;
String key2;
.. so on

}

Как мне прочитать файл yml, чтобы он читался как одна хэш-карта? Это возможно?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

При создании приложения Dropwizard класс YourApplication должен будет расширяться Application<YourConfiguration>. Так или иначе, вам нужно создать класс YourConfiguration. Теперь, внутри класса YourConfiguration, если вы хотите избежать перечисления всех свойств и соответствующего метода получения / установки, вы можете определить одно свойство как Map и указать все значения ключа в ранее определенном свойстве в yaml файл.

config.yml

myMap:
  key1: value1
  key2: value2

YourConfiguration.class

class YourConfiguration extends Configuration {
  Map<String, String> myMap;

  Map<String, String> getConfigMap() {
    return myMap;
  }
}
0 голосов
/ 07 сентября 2018

Вы можете читать файлы yaml, используя объектную карту Джексона, а затем присваивать им любой тип, какой захотите. Очень простой пример для вашего вышеупомянутого yaml будет:

Файл test_yaml.yaml:

myObject:
  key1: value1
  key2: value2
  key3: value3

Код:

package yaml;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

public class YamlMapParser {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

        InputStream resource = YamlMapParser.class.getResourceAsStream("/yaml/test_yaml.yaml");
        Map readValue = mapper.readValue(resource, Map.class);
        System.out.println(readValue);
    }
}

Важным моментом является предоставление Джексону ObjectMapper YAMLFactory для работы.

Приведенный выше код печатает:

{myObject={key1=value1, key2=value2, key3=value3}}

Надеюсь, это поможет!

Артур

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...