簡體   English   中英

如何在dropwizard中將yaml(配置)文件讀取為JSON?

[英]How can I read yaml (Configuration) file as JSON in dropwizard?

我想將配置yaml文件解析為Dropwizard中的JSON對象。 與在Python和Ruby中一樣,我們可以直接將yaml文件讀取為JSON:

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

我想遵循相同的協議,並且不想創建一個單獨的類來映射yaml結構,但是不確定如何在Java中實現它。

如果我理解正確,則不是要定義一個類來表示JSON或YAML的結構,而是要檢索一個對象,該對象可以使您以通用方式訪問JSON對象。

即使這有點與dropwizard想要做的事情相反(即,鍵入類來訪問配置數據),它還是相對容易的:

  1. 您需要一個Jackson 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"));

Jackson可以解析yaml並格式化為JSON。 在這里查看示例。

您可以只使用DropWizard中的Configuration對象,該對象是默認對象或已創建的自定義對象,用於保存其他參數。 該對象在Application類上可用,尤其是在“運行”方法下。 使用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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM