【问题标题】:Stores array in YAML在 YAML 中存储数组
【发布时间】:2020-10-08 07:35:36
【问题描述】:

如何在 yaml 中存储数组并在代码中从该数组中提取值?我试过这样:

report:
  interval: 3
  to:
    - somemail@gmail.com
    - somemail@somecompany.com
    - io.lab@hh.com
    - ...

在代码的后面(Spring Boot)我试图将值提取到我的数组中:

@Value("${report.to}")
private String [] recipients;

所以,我期待得到这个数组:

String [] recipients = new String[]{"somemail@gmail.com", ...}

但我得到了例外:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'report.to' in value "${report.to}"

我做错了什么?

【问题讨论】:

  • 请考虑接受@hsadik 的答案。美好的一天

标签: java spring yaml


【解决方案1】:
  1. 一种方法是将元素作为分隔列表传递。通常我们使用逗号,它对字符串数组开箱即用。

  2. 第二种使用 List 的方式,那么你需要使用 Spring SPEL 格式设置分隔符...参见下面的示例。

YML

report:
  interval: 3
  to: somemail@gmail.com,somemail@somecompany.com,io.lab@hh.com

Value("${report.to:}")
private String[] array;


@Value("#{'${{report.to}'.split(',')}")
private List<String> recipients;

@PostConstruct
void testList(){
    list.stream().forEach(System.out::println);
    for (String a : array) {
        System.out.println(a);
    }
}

【讨论】:

【解决方案2】:

只是建议,如果不是你想要的,请随意忽略,不用担心。

但也许你可以使用类似的东西

    @Value("#{'${report.to}'.split(',')}")
    private List<String>         recipients;

在属性文件中:

report:
  interval: 3
  to: somemail@gmail.com,somemail@somecompany.com,io.lab@hh.com

如果您在应用中获取列表,则转换为数组应该很简单。喜欢:

    public String[] getRecipients() {
        return recipients.toArray(new String[0]);
    }

美好的一天

【讨论】:

    【解决方案3】:

    使您的 yaml 字段以逗号分隔以将其解析为数组

    report:
      interval: 3
      to: somemail@gmail.com,somemail@somecompany.com,io.lab@hh.com
    

    你的 Java 代码可以是

    @Value("${report.to}")
    private String [] recipients;
    

    @Value("${report.to}")
    private List<String> recipients;
    

    点击此链接了解更多提示和技巧 https://youtu.be/NFQDqEhx2e0

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 2023-03-09
      • 2011-06-20
      • 2013-03-30
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2014-05-10
      • 2013-11-28
      相关资源
      最近更新 更多