【发布时间】:2017-04-03 20:48:43
【问题描述】:
在我的 Spring-boot 应用程序中使用 yaml(具有 snakeyaml 依赖项 1.16)我正在尝试基于我的 application.yml 文件创建一个 @ConfigurationProperties。我想创建一个像下面的 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']
我也尝试在 @ConfigurationProperties 类中初始化 HashMap,例如 ... new HashMap<String, Set<String>> 这也不起作用
所有尝试都会导致此错误,这让我相信在转换为对象时这是一个错误,而不是 yaml 语法有任何问题。
原因:org.springframework.beans.InvalidPropertyException: Invalid bean 类的属性“brokerTest[message-delivery][0]” [my.classpackage.classname]: 索引属性路径中引用的属性 'brokerTest[message-delivery][0]' 既不是数组也不是 List 也不是 地图;返回值为 [all]
是否可以创建这样的对象?我将如何做到这一点
-更新-
如果我将 Set 更改为 ArrayList(或 List 接口),这可行,但这不是我想要的。改成这个了
private Map<String, ArrayList<String>> brokerTest = new HashMap<>();
但需要这也不适用于 Set 接口:
private Map<String, HashSet<String>> brokerTest = new HashMap<>();
【问题讨论】:
标签: java spring spring-boot yaml snakeyaml