【问题标题】:Spring Boot YAML configuration for a list of strings containing commas包含逗号的字符串列表的 Spring Boot YAML 配置
【发布时间】:2022-11-10 15:17:09
【问题描述】:

由于 Java 7 兼容性,我正在使用 Spring Boot 版本 1.5.22 - 遗留的东西,博物馆级,不要使用。

我需要在 Spring Boot 的 YAML 配置中包含一个包含逗号的字符串数组。 问题是这个旧的 Spring Boot 并不完全支持所有 YAML 特性——即数组的实现有点hacky。

对于其他字符串数组(不包含逗号),我使用以下内容:

YAML:

element:
  list: >
    aaaa,
    bbbb

爪哇:

@Value("${element.list}")
protected String[] elementList;

但是,使用逗号,以下内容要么以空数组结尾,要么忽略我尝试的任何转义并被所有逗号分割:

YAML:

element:
  list: >
    aa,aa,
    bb,bb
element:
  list: >
    "aa,aa",
    "bb,bb"
element:
  list: >
    'aa,aa',
    'bb,bb'
element:
  list: >
    aa\,aa,
    bb\,bb
element:
  list: [
    "aa,aa",
    "bb,bb"
  ]
element:
  list:
    - aa,aa
    - bb,bb
element:
  list:
    - "aa,aa"
    - "bb,bb"

【问题讨论】:

    标签: java spring-boot yaml java-7


    【解决方案1】:

    看起来这个旧版本的 Spring Boot 用逗号分割数组并忽略任何转义尝试。我最终得到以下结果:

    YAML(使用分号而不是逗号):

    element:
      list: >
        aa;aa,
        bb;bb
    

    Java(替换 ; -> , in @PostConstruct):

    @Value("${element.list}")
    protected String[] elementList;
    
    @PostConstruct
    private void postConstruct() {
        for (int i = 0; i < elementList.length; i++) {
            elementList[i] = elementList[i].replace(";", ",");
        }
    }
    
    

    【讨论】:

      【解决方案2】:

      我最近想出了这个完全相同的问题,它需要应用自定义分隔符而不是默认分隔符逗号。

      在配置中,您可以执行以下操作:

      element:
        list: aa,aa;bb,bb;cc,cc
      

      并在注入属性时执行以下操作:

      @Value("#{'${element.list}'.split(';')}")
      protected List<String> elementList;
      

      参考:https://www.baeldung.com/spring-inject-arrays-lists

      【讨论】:

        猜你喜欢
        • 2014-12-29
        • 2016-01-17
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多