Spring Boot: чтение списка из yaml с использованием @Value или @ConfigurationProperties
Я хочу прочитать список хостов из файла yaml (application.yml), файл выглядит так:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
(Пример 1)
Мой используемый класс определяет значение следующим образом:
@Value("${cors.hosts.allow}")
List<String> allowedHosts;
Но чтение не удается, так как Spring жалуется на это:
java.lang.IllegalArgumentException: не удалось разрешить заполнитель 'cors.hosts.allow' в строковом значении "$ {cors.hosts.allow}"
Когда я изменяю файл следующим образом, свойство может быть прочитано, но, естественно, оно не содержит список, а содержит только одну запись:
cors:
hosts:
allow: http://foo1, http://foo2, http://foo3
(Я знаю, что могу прочитать значения одной строкой и разделить их на","
но я пока не хочу идти на обходной путь)
Это также не работает (хотя я думаю, что это должно быть действительным в соответствии сsnakeyamls docs):
cors:
hosts:
allow: !!seq [ "http://foo1", "http://foo2" ]
(Пропуск!!seq
и просто используя[
/ ]
тоже провал)
Я прочитал предложениеВот который включает в себя использование@ConfigurationProperties
и перенес пример в Java и использовал его с файлом yaml, который вы видите в Example1:
@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
@NotNull
public List<String> allow;
...
Когда я запускаю это, я получаю эту жалобу:
org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult: 1 error Ошибка поля в объекте 'cors.hosts' в поле 'allow': отклоненное значение [null]; коды [NotNull.cors.hosts.allow, NotNull.allow, NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [cors.hosts.allow, allow]; аргумент тс []; сообщение по умолчанию [разрешить]];
Я искал другие способы настройки хостов CORS и нашел этоВесенняя загрузка но так как это еще не закончено, я не могу использовать это как решение. Все это делается с помощью Spring Boot 1.3 RC1