Сохранять ведущее место в свойствах yaml приложения - PullRequest
0 голосов
/ 13 июля 2020

У меня есть список свойств в файле yml

foo:
    bar:  One., Two., Three

при преобразовании их в список

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

Начальные пробелы обрезаются, поэтому я получаю «Один». "Два." «Три.», Но мне нужно «Один». " Два." " Три." с пробелами перед каждым. Помещение "\ u0020" впереди не помогло, оно все равно было обрезано.

Ответы [ 4 ]

4 голосов
/ 13 июля 2020

Просто используйте " вокруг ваших значений:

foo:
    bar: " One."," Two."," Three"

Также вы можете использовать явный формат списка:

foo:
    bar: 
        - " One."
        - " Two."
        - " Three"
2 голосов
/ 13 июля 2020

Когда вы ожидаете List<String> или String[], Spring разделит значение входной строки, используя , в качестве разделителя.

Чтобы создать нужную строку, вам нужно иметь пробел в кавычках ( в противном случае он игнорируется в соответствии с синтаксисом yaml):

foo:
    bar: " One., Two., Three"

Однако преобразователь по умолчанию Spring может вызывать trim() для каждого токена (я не помню точно, так ли это на самом деле), просто отбрасывая в любом случае все ваши ведущие / конечные пробелы.

В этом случае вы можете зарегистрировать другой преобразователь, который не обрезается или, что гораздо лучше, просто возьмите строку и разделите ее самостоятельно.

1 голос
/ 14 июля 2020

Я закончил этим. И это сработало

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

и окружило свойства с помощью "

foo:
    bar:  " One., Two., Three"
0 голосов
/ 13 июля 2020

Удаление таких пробелов нарушит назначение trim () для файла 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
}

Используйте его в своем коде

class UseHere {

@Autowired
private Configs configs;

...

// read as follows
configs.getYourList().get(0);
...

}
...