【问题标题】: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}}
      

      希望对您有所帮助!

      阿图尔

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        相关资源
        最近更新 更多