【问题标题】:What should the format of a map with list look like in SpEL带有列表的地图格式在 SpEL 中应该是什么样的
【发布时间】:2021-12-20 13:19:56
【问题描述】:

我正在尝试在 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&lt;String, List&lt;String&gt;&gt; mapOfLists 读取密钥时,spring 不高兴并且错误提示它找不到该值。

如果我将密钥和@Value 类型更新为Map&lt;String, String&gt;,则同样有效

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

另外,@Value 是从application.properties 读取列表映射的好方法吗?

【问题讨论】:

    标签: java spring spring-el


    【解决方案1】:

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

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

    这以后可以读作

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

    【讨论】:

      【解决方案2】:

      试试这个:

      @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 是否需要“?我尝试使用“封闭和错误java.lang.IllegalStateException:无法将'java.lang.String' 类型的值转换为必需键入“java.util.Map”:未找到匹配的编辑器或转换策略。并且在没有 " 的情况下成功运行。
      • 你是对的。如果使用application.yml,则需要"。答案已更新。
      • 这与我已有的有什么不同?
      • @TarunKolla 你得到了什么异常?
      • java.lang.IllegalArgumentException: Could not resolve placeholder 'key' in value "#{${key}}" 你想要完整的堆栈跟踪吗?我可以用它更新问题
      猜你喜欢
      • 1970-01-01
      • 2020-02-23
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多