【问题标题】:How can I read yaml (Configuration) file as JSON in dropwizard?如何在 dropwizard 中将 yaml(配置)文件读取为 JSON?
【发布时间】:2018-05-16 01:49:58
【问题描述】:

我想在 Dropwizard 中将配置 yaml 文件解析为 JSON 对象。 在 Python 和 Ruby 中,我们可以直接将 yaml 文件读取为 JSON:

require 'yaml'
conf = YAML.load_file('some.yml')
puts conf.<some key>

我想遵循相同的协议,不想制作单独的类来映射yaml结构,但不确定如何在Java中实现。

【问题讨论】:

    标签: java json ruby yaml dropwizard


    【解决方案1】:

    Jackson 可以解析 yaml 和格式化为 JSON。 查看示例here

    【讨论】:

    • 重点不是创建单独的架构/映射器来读取yaml,但是您提供的链接没有这样做。
    【解决方案2】:

    如果我理解正确,您不是定义一个类来表示 JSON 或 YAML 的结构,而是要检索一个对象,该对象使您能够以通用方式访问 JSON 对象。

    尽管这与 dropwizard 想要做的事情的方式有点相反(即,有类型的类来访问配置数据),但它相对容易:

    1. 您需要一个 Jackson ObjectMapper 的实例:由 dropwizard 提供的或者您拥有的、支持 YAML 的实例(参见下面的示例)。
    2. 您可以调用readTree 方法将输入转换为JsonNode,从而可以访问内存中的JSON/YAML 对象。

    参见ObjectMapper#readTree 和类似方法。

    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    JsonNode json = mapper.readTree(new File("some.yml"));
    System.out.println(json.get("test"));
    

    【讨论】:

      【解决方案3】:

      您可以只使用 DropWizard 中的 Configuration 对象,可以是默认对象,也可以是为保存其他参数而创建的自定义对象。该对象在Application 类中可用,特别是在“run”方法下。使用DW配置示例:

      public class ExampleConfiguration extends Configuration {
          @Valid
          @NotNull
          private MessageQueueFactory messageQueue = new MessageQueueFactory();
      
          @JsonProperty("messageQueue")
          public MessageQueueFactory getMessageQueueFactory() {
              return messageQueue;
          }
      
          @JsonProperty("messageQueue")
          public void setMessageQueueFactory(MessageQueueFactory factory) {
              this.messageQueue = factory;
          }
      }
      

      您可以从 YAML 文件中获取/设置所有属性,如下所示:

      public class MyApplication extends Application<ExampleConfiguration> {
      
          ...
      
          public void run(ExampleConfiguration configuration, Environment environment) {
      
              configuration.getMessageQueueFactory();
              configuration.getServerFactory();
          }
      }
      

      【讨论】:

      • 重点是不要添加getter/setter。这是它在 dropwizard 中的实际操作方式。
      • 我误解了@divyum 的问题。也许您可以将 YAML 文件解析为 HashMap 并使用字符串键检索属性?你仍然需要一个新的 Jackson 映射器......
      • 确实是@André Barbosa 的方式,但必须从图片中删除 Jackson 映射器。
      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2020-11-09
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多