Используя yaml в моем приложении Spring-boot (с зависимостью snakeyaml 1.16), я пытаюсь создать @ConfigurationProperties
на основе моего файла application.yml. Я хочу создать структуру данных, такую как json ниже, которая представляет собой карту со строковыми ключами и значениями массива.
mapName: {
"key1": ["elem0","elem1"],
"key2": ["hello","world"]
}
Попытка создать класс конфигурации Spring следующим образом
@Component
@ConfigurationProperties(prefix = "channel-broker")
@EnableConfigurationProperties
public class BrokerConfiguration {
private Map<String, Set<String>> broker = new HashMap<>();
public Map<String, Set<String>> getBroker() {
return broker;
}
}
Я пробовал следующее для своего yaml
channel-broker:
broker: {message-delivery: ['all'], facebook: ['client1']}
Попытка два
channel-broker:
message-delivery: ['all']
facebook: ['client1']
Попытка три
channel-broker:
message-delivery:
- ['all']
facebook:
- ['client1']
Я также пробовал инициализировать HashMap в классе @ConfigurationProperties
, как таковой ... new HashMap<String, Set<String>>
это тоже не сработало
Все попытки приводят к этой ошибке, что заставляет меня думать, что это ошибка при преобразовании в объект, а не то, что что-то не так с синтаксисом yaml.
Вызвано: org.springframework.beans.InvalidPropertyException: недопустимое свойство 'brokerTest [доставка-сообщения] [0]' класса bean-компонента [my.classpackage.clasname]: свойство, указанное в пути индексированного свойства 'brokerTest [доставка-сообщения] [0 ] 'не является ни массивом, ни списком, ни картой; возвращенное значение было [все]
Можно ли создать такой объект? Как бы мне этого добиться?
-ОБНОВИТЬ-
Если я изменю Set на ArrayList (или интерфейс List), это будет работать, но это не то, что я ищу. изменено на это
private Map<String, ArrayList<String>> brokerTest = new HashMap<>();
но это не работает и с интерфейсом Set:
private Map<String, HashSet<String>> brokerTest = new HashMap<>();