我想在Dropwizard中将配置yaml文件解析为JSON对象。 在Python和Ruby中,我们可以直接将yaml文件读作JSON:
require 'yaml'
conf = YAML.load_file('some.yml')
puts conf.<some key>
我想遵循相同的协议,并且不希望创建一个单独的类来映射yaml结构,但不确定如何在Java中实现它。
答案 0 :(得分:2)
如果我理解正确,您不想定义一个类来表示JSON或YAML的结构,而是要检索一个允许您以通用方式访问JSON对象的对象。
尽管这与dropwizard想要做的事情有点相反(即,有类型的类来访问配置数据),但它相对容易:
Generic<T>
的实例:由dropwizard提供的实例或您拥有的实例,YAML-aware(参见下面的示例)。ObjectMapper
方法将输入转换为readTree
,这样您就可以访问内存中的JSON / YAML对象。请参阅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();
}
}