如何在 dropwizard 中将 yml 文件读入 java hashmap

use*_*mda 1 java yaml hashmap dropwizard

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

myObject:
  key1: value1
  key2:value2
  key3: value3
Run Code Online (Sandbox Code Playgroud)

然后我有一个 Dropwizard Configuration 类

public class MyObject {

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

}
Run Code Online (Sandbox Code Playgroud)

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

pan*_*adb 6

您可以使用 Jackson 的 objectmapper 读取 yaml 文件,然后为其指定您想要的任何类型。上述 yaml 的一个非常基本的示例是:

文件test_yaml.yaml:

myObject:
  key1: value1
  key2: value2
  key3: value3
Run Code Online (Sandbox Code Playgroud)

代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是要给杰克逊ObjectMapper一个YAMLFactory合作的机会。

上面的代码然后打印:

{myObject={key1=value1, key2=value2, key3=value3}}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

阿图尔