【问题标题】:How do I map a nested yaml structure to Java's ConfigurationProviderBuilder?如何将嵌套的 yaml 结构映射到 Java Configuration Provider Builder?
【发布时间】:2017-04-11 18:24:34
【问题描述】:

我有一些创建 ConfigurationProviderBuilder 的 java 代码。

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

如何将这个 ^ 翻译成 java 代码,以便在 ExampleConf 中使用?

我还在学习java,这对我来说在python中会容易得多。

【问题讨论】:

    标签: java list dictionary yaml config


    【解决方案1】:

    试试:

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

    【讨论】:

    • 嘿,这似乎是个好主意。我现在遇到错误 Exception in thread "main" java.lang.IllegalArgumentException: Unable to cast value 'path one,path two'
    • 绑定看起来有些麻烦。不过,这似乎很接近。
    • 我没有使用 cfg4j 的经验,如果我需要这样做,我可能只是使用 SnakeYaml 的反序列化功能。我不确定 cfg4j 的抽象增加了什么。
    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多