1

我想做的事

定义一组可以通过环境变量增强的基本对象。在下面,您会看到到目前为止我的 hocon 配置文件的一个小示例。

foo.bar-base= [
  {a: "hello", b: "world"},
  {a: "hello", b: "stackoverflow"}
]
foo.bar-extended = ${?EXTENDED}
foo.bar = ${foo.bar-base} ${foo.bar-extended}

问题

当尝试定义要添加为环境变量的元素时,我得到一个异常,指出 foo.bar 具有 STRING 类型列表而不是 OBJECT 列表。

有没有办法让环境变量的值被解析为对象?

EXTENDED.0={a:"hello", b:"rest"}
4

1 回答 1

0

我使用了一种解决方法。我没有使用config.getConfigListwhich 直接返回一个Config对象列表,而是使用config.getListwhich 返回一个ConfigValues.

然后我手动进行了解析:

final ConfigList list = config.getList("foo.bar");
final Stream<Config> configsFromString = list.stream()
                    .filter(value -> ConfigValueType.STRING.equals(value.valueType()))
                    .map(ConfigValue::unwrapped)
                    .map(Object::toString)
                    .map(ConfigFactory::parseString);
final Stream<Config> configsFromMap = list.stream()
                    .filter(value -> ConfigValueType.OBJECT.equals(value.valueType()))
                    .map(ConfigValue::render)
                    .map(ConfigFactory::parseString);
final List<Config> configs = Stream.concat(configsFromString, configsFromMap)
                    .collect(Collectors.toList());
于 2021-08-03T10:04:21.953 回答