保留应用程序yaml属性中的前导空间

保留应用程序yaml属性中的前导空间,yaml,Yaml,我在yml文件中有一个属性列表 foo: bar: One., Two., Three 将它们转换为列表时 @Value("\${foo.bar}") public var listOfBar: List<String> = mutableListOf() 前导空格被修剪,所以我得到 一二三个,但我需要的是一个。二三每个前面都有空格。将“\u0020”放在前面没有帮助,但还是被修剪了。只需围绕您的值使用: 傅: 酒吧:一,二,三 您还可以使用显式列表

我在yml文件中有一个属性列表

foo:
    bar:  One., Two., Three
将它们转换为列表时

@Value("\${foo.bar}")
public var listOfBar: List<String> = mutableListOf()
前导空格被修剪,所以我得到 一二三个,但我需要的是一个。二三每个前面都有空格。将“\u0020”放在前面没有帮助,但还是被修剪了。

只需围绕您的值使用:

傅: 酒吧:一,二,三 您还可以使用显式列表格式:

傅: 酒吧: -一个。 -两个。 -三
删除这样的空格将破坏对yaml文件进行修剪的目的。 尽管我不理解您可能需要此功能的用例。但是,我可以建议使用自定义模式来实现这一点,如下所示:

您可以为yaml文件中所需的空间设置令牌:

foo:
  bar:  $__$One., Two., Three$_$
使用不同的类来检索配置:

public class Configs {
@Value("${foo.bar}")
private List<String> yourList;

public List<String> getYourList(){
 // before returning, replace $_$ with space in yourList
}
当您期望列表或字符串[]时,Spring将使用,作为分隔符拆分输入字符串值

要生成所需的字符串,需要在引号中包含空格,否则将根据yaml语法忽略它:

foo:
    bar: " One., Two., Three"
然而,Spring默认转换器可能会在每个令牌上调用trim,我记不清这是否真的是这样,不管怎样,只要删除所有的前置/尾随空格


在这种情况下,您可能希望注册一个不同的转换器,该转换器不进行修剪,或者——更好的做法是——自己将字符串拆分。

我最终完成了此操作。而且成功了

 @Value("#{'\${foo.bar}'.split(',')}")
 public var listOfBar: List<String> = mutableListOf()

我试过这个。我得到了预期,但发现“,”@EgorGorko在整个值周围加了引号:一、二、三好吧,这就是它想要做的,但lead说这是一根拐杖。这有点像“自己拿绳子分开”的方法吗
 @Value("#{'\${foo.bar}'.split(',')}")
 public var listOfBar: List<String> = mutableListOf()
foo:
    bar:  " One., Two., Three"