2017-04-11 120 views
1

我有一些创建ConfigurationProviderBuilder的java代码。如何将嵌套的yaml结构映射到Java的ConfigurationProviderBuilder?

private static ExampleConf conf(String confFile) { 
    ConfigFilesProvider configFilesProvider = 
      () -> Arrays.asList(Paths.get(confFile).toAbsolutePath()); 

    // use local files as config source 
    ConfigurationSource source = 
      new FilesConfigurationSource(configFilesProvider); 

    // create provider 
    return new ConfigurationProviderBuilder() 
      .withConfigurationSource(source) 
      .build() 
      .bind("", ExampleConf.class); 

} 

ExampleConf看起来像这样

public interface ExampleConf { 
    String host(); 
    int port(); 
    String certFile(); 
} 

最后,实际的配置文件看起来像这样

host: localhost 
port: 8980 
certFile: /usr2/certs/ca/ca.crt 

这是很容易的,但现在我想创建的嵌套结构yaml配置文件。像这样的东西

paths: 
    - name: path one 
    columns: 
     - foo 
     - bar 
    - name: path two 
    columns: 
     - mario 
     - luigi 

如何将THIS ^翻译成用于ExampleConf的java代码?

我还在加快Java的速度,这对我来说会更容易在Python中。

回答

1

尝试:

public interface ExampleConf { 
    public interface MyObject { 
     String name(); 
     List<String> columns(); 
    }   

    List<MyObject> paths(); 
} 
+0

嘿,这似乎是一个不错的主意。我现在遇到了错误 **线程“主”java.lang.IllegalArgumentException异常:无法转换值'路径一,路径二'** – Zack

+0

有一些麻烦绑定它看起来像。这看起来很接近。 – Zack

+0

我对cfg4j没有经验,如果我需要这样做,我可能会使用SnakeYaml的反序列化功能。我不确定cfg4j的抽象增加了什么。 – flyx