【问题标题】:Spring value injection of a Map of List of Maps一个Map of Maps的Spring值注入
【发布时间】:2018-10-26 01:56:48
【问题描述】:

这听起来可能很疯狂,但我正在尝试为我的以下数据结构获取属性文件

@Value("#{${myBigMap}}")
Map<String, List<Map<String, String>>> myBigMap;

属性文件应该是这样的

myBigMap = { \
      "key1": [{subkey1:'subval1'}], \
      "key2": [{subkey3:'subval3'},{subkey4:'subval4'}] \
}

我可以让地图的地图工作,但这个似乎太有弹性了。我有一些用于其他值注入的系统属性。不确定我是否可以手动将 yaml 属性组合到属性源中。

它不是 Spring Boot 应用程序。我们只是使用 Spring 进行依赖注入。

非常感谢任何帮助/线索

【问题讨论】:

  • 不确定如何在 spring 中执行此操作,但您可以将其作为 json 字符串属性,然后将值注入字符串变量,然后使用 jackson 将其转换为您想要的任何数据结构跨度>
  • 这是@ConfigurationProperties 的理想人选,这是您没有的 Spring Boot。您可以将属性作为 json 字符串注入到 bean 构造函数 String 参数中,然后使用 Jackson ObjectMapper 将其转换为地图。

标签: java spring data-structures properties


【解决方案1】:

感谢您的提示。我实际上是通过使用 Jackson 的 yaml 帮助让它工作的

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
    try {
        Resource myResource = new ClassPathResource("my.yaml");
        Map<String, List<Map<String, String>>> myMap = mapper.readValue( myResource.getInputStream() , Map.class);
        }

我的 yaml 看起来像

k1:
  - sk1: val1
  - sk2: val2

k2:
  - sk3: val3
  - sk4: val4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2014-12-22
    • 2015-08-21
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多