如何在Dropwizard中将yml文件读取到Java哈希图中

时间:2018-09-07 13:02:19

标签: java hashmap yaml dropwizard

在我的config.yml中,我有这样的配置

myObject:
  key1: value1
  key2:value2
  key3: value3

然后我有一个Dropwizard配置类

public class MyObject {

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

}

如何读取yml文件,使其仅作为一个哈希图读取?这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用jackson的objectmapper读取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);
    }
}

重要的一点是给Jackson的ObjectMapper一个YAMLFactory来使用。

然后显示以上代码:

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

希望对您有所帮助!

Artur

答案 1 :(得分:0)

在创建Dropwizard应用程序时,YourApplication类将需要扩展Application<YourConfiguration>。因此,无论如何,您都需要创建一个YourConfiguration类。现在,在YourConfiguration类内部,如果要避免列出所有属性和相应的getter / setter,可以将单个属性定义为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;
  }
}