在 SpEL 中,带有列表的地图的格式应该是什么样的

What should the format of a map with list look like in SpEL

我正在尝试在 spring 批处理应用程序中读取来自 application.properties 的列表映射

ExpressionParser parser = new SpelExpressionParser();
Map<String, List<String>> mapOfLists = (Map<String, List<String>>) parser.parseExpression("{'KEY1':{'value1','value2'},'KEY2':{'value3','value4'},'KEY3': {'value5'}}").getValue();

上面的工作正常但是当我在 application.properties 中输入与 map-of-lists={'KEY1':{'value1','value2'},'KEY2':{'value3','value4'},'KEY3': {'value5'}} 相同的值并尝试使用 @Value("#{${map-of-lists}}") final Map<String, List<String>> mapOfLists 读取密钥时 spring 不高兴并且错误提示找不到值。

如果我更新密钥并将 @Value 键入 Map<String, String>

,同样有效

我没有读到 spring 是如何解析值的,但有没有办法做到这一点?

此外,@Value 是从 application.properties 中读取列表地图的好方法吗?

试试这个:

@Value("#{${map-of-lists}}")
private Map<String, List<String>> mapOfLists;

application.properties

map-of-lists={'KEY1':{'value1','value2'}, 'KEY2':{'value1','value2'}}

在application.yml的情况下应该是:

map-of-lists: "{'KEY1':{'value1','value2'}, 'KEY2':{'value1','value2'}}"

经过大量查找和调试后,下面的工作正常。我必须为 , 添加转义字符,这就完成了

map-of-lists={KEY1:{value1\,value2}\,KEY2:{value3\,value4}\,KEY3:{value5}}

这以后可以读作

@Value("#{${map-of-lists}}") final Map<String, List<String>> mapOfLists