java—如何将spring application.yml文件中的字符串列表读入不可变对象?

yqkkidmi  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(290)

这是一个样本 application.yml 文件

myapp:
  resource:
    teststring: "string"
    testlist:
      - "apple"
      - "banana"

这是我的不可变配置类

import org.immutables.value.Value.Immutable;
import org.immutables.value.Value.Modifiable;

@Immutable
@Modifiable
public abstract class ResourceConfiguration {

  public abstract String teststring();

  public abstract List<String> testlist();

}

下面是我的顶级配置类

@ConstructorBinding
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfiguration {

  private final ImmutableResourceConfiguration resource;

  public MyAppConfiguration(ImmutableResourceConfiguration resource) {
    this.resource = resource.toImmutable();
    System.out.println("Look here: "+resource);
  }

上面写着 teststring 价值观很好。但是 testlist 是空的。
请注意,我可以阅读 testlist 如果它没有 Package 在一个不可变的文件中,比如我把application.yml改为

myapp:
  resource:
    teststring: "string"
  testlist:
    - "apple"
    - "banana"

我把最高级的课程改成:

@ConstructorBinding
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfiguration {

  private final ImmutableResourceConfiguration resource;

  public MyAppConfiguration(ImmutableResourceConfiguration resource, List<String> testlist) {
    this.resource = resource.toImmutable();
    System.out.println("Look here: "+testlist);
  }

那么 testlist 已正确填充。
所以我假设这与不可变库处理spring配置文件中列表的方式有关。

bz4sfanl

bz4sfanl1#

经过一番实验,我发现你必须把它当作一本书来读 String[] 而不是 List<String> ```
@Immutable
@Modifiable
public abstract class ResourceConfiguration {

public abstract String[] testlist();

}

我在任何地方都看不到这一点,所以如果有人能提供,我会很高兴地选择这一点作为更好的答案。

相关问题