2017-04-11 62 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