【问题标题】:How to read a yml file into a java hashmap in dropwizard如何在 dropwizard 中将 yml 文件读入 java hashmap
【发布时间】:2019-02-12 20:15:34
【问题描述】:
在我的 config.yml 我有这样的配置
myObject:
key1: value1
key2:value2
key3: value3
然后我有一个 Dropwizard 配置类作为
public class MyObject {
String key1;
String value1;
String key2;
.. so on
}
如何读取 yml 文件以使其仅作为一个哈希图读取?这可能吗?
【问题讨论】:
标签:
java
hashmap
yaml
dropwizard
【解决方案1】:
创建 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;
}
}
【解决方案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);
}
}
重要的一点是给杰克逊的ObjectMapper 一个YAMLFactory 工作。
上面的代码然后打印:
{myObject={key1=value1, key2=value2, key3=value3}}
希望对您有所帮助!
阿图尔