Свяжите список строк в yml (один уровень ) со списком Java весной

#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