如何在dropwizard中将yaml(配置)文件读作JSON?

时间:2017-12-01 22:07:18

标签: java json ruby yaml dropwizard

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

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

我想遵循相同的协议,并且不希望创建一个单独的类来映射yaml结构,但不确定如何在Java中实现它。

3 个答案:

答案 0 :(得分:2)

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

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

  1. 您需要一个杰克逊Generic<T>的实例:由dropwizard提供的实例或您拥有的实例,YAML-aware(参见下面的示例)。
  2. 您可以调用ObjectMapper方法将输入转换为readTree,这样您就可以访问内存中的JSON / YAML对象。
  3. 请参阅ObjectMapper#readTree及类似方法。

    JsonNode

答案 1 :(得分:0)

杰克逊可以解析yaml并格式化为JSON。 查看示例here

答案 2 :(得分:0)

您可以使用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();
    }
}