#java #spring #spring-boot #yaml
Вопрос:
У меня есть файл yml со следующим списком строк:
list-of-strings:
- el1
- el2
- el3
Я реализовал класс конфигурации для его извлечения:
@ConfigurationProperties(prefix = "list-of-strings")
public class ListOfStringsConfig {
private List<String> listOfStrings;
public List<String> getListOfStrings) {
return listOfStrings;
}
}
который не может получить список строк (когда я обращаюсь к строкам списка, это вызывает исключение NullPointerException).
Я заметил, что если я изменю yml, поставив 2 уровня, например:
list:
strings:
- el1
- el2
- el3
и соответствующим образом измените конфигурацию:
@ConfigurationProperties(prefix = "list")
public class ListOfStringsConfig {
private List<String> strings;
public List<String> getStrings) {
return strings;
}
}
это работает так, как и ожидалось.
Поскольку для моего случая наличие 2 уровней вообще не имеет значения, мне было интересно, есть ли способ заставить его работать с первым вариантом использования, поэтому в yaml только один уровень.
Ответ №1:
Если вам действительно нужен только один уровень, то вам нужно удалить префикс. Способ, которым это работает, — это префикс имя переменной для сопоставления значений.
Тем не менее, я бы не рекомендовал этого делать, так как было бы намного проще иметь то, что уже существует.
Примечание: если у вас есть только одно значение для извлечения, вы можете использовать @Value
вместо этого
Ответ №2:
Это невозможно. Вам необходимо установить префикс. Это может быть немного чище, хотя это все еще два уровня:
list.strings:
- el1
- el2
- el3