首页 > 解决方案 > 如何在我的属性中设置 Map 字段,而不必单独列出每个键/值对?

问题描述

我有一个带有Map <String, List<String>>字段的服务的 Spring Boot 应用程序。地图是从属性文件中获取的,其设置如下:

mapField.key1[0]=value10
mapField.key1[1]=value11
mapField.key1[2]=value12
mapField.key2[0]=value20

如何设置如下:

mapField={key1=[value10, value11, value12], key2=[value20]}

没有遇到转换错误:

Failed to bind properties under 'mapField' to Map<String, List<String>>

标签: javaspringspring-bootconfiguration

解决方案


您的映射有点复杂,所以我建议定义一个 ConfigurationProperties。

@Configuration
@ConfigurationProperties
public class MapFieldConfig {

    private Map<String,List<String>> myMap;

    public Map<String, List<String>> getMyMap() {
        return myMap;
    }

    public void setMyMap(Map<String, List<String>> myMap) {
        this.myMap = myMap;
    }
}

通过这种方式,您可以自动装配包含目标配置的新对象:

@Autowired
MapFieldConfig mapFieldConfig;

您的 application.properties 文件将是:

myMap.key1=a,b,c
myMap.key2=d,c,f

推荐阅读