如何使用spring从属性文件加载地图

时间:2015-02-13 08:18:50

标签: java spring

我正在尝试将.properties文件中的地图加载到HashMap

属性文件具有以下内容:

try.map= one=1,\
two=2

代码:

@org.springframework.beans.factory.annotation.Value("${try.map}")
HashMap<String, String> tryMap;

将属性加载到地图会导致:

 java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.HashMap]: no matching editors or conversion strategy found

有关如何为此创建映射策略的任何想法吗?

3 个答案:

答案 0 :(得分:1)

我也遇到了这个错误。如果要解决此问题而无需付出太多努力,只需正确检查导入即可。 如果导入错误的文件,通常会出现此错误。如果您遇到这种情况,我认为您正在文件中导入错误的HashMap。检查它应该是java.util.HashMap。

答案 1 :(得分:0)

没有默认转换器。因此,您必须编写自己的转换器并将其注册到conversationService。

这是一个基于注释的示例:

@Bean(name="conversionService") 
public static ConversionService getConversionService(){
    ConversionServiceFactoryBean conversionServiceFactoryBean = new ConversionServiceFactoryBean();
    Set<Converter<?,?>> converters = new HashSet<Converter<?,?>>();
    converters.add(new StringToHashMapConverter());
    conversionServiceFactoryBean.setConverters(converters);
    conversionServiceFactoryBean.afterPropertiesSet();
    return conversionServiceFactoryBean.getObject();
}

转换器:

import java.util.HashMap;

import org.springframework.core.convert.converter.Converter;

public class StringToHashMapConverter implements Converter<String,HashMap> {

    @Override
    public HashMap convert(String paramS) {
           //do the coversion
    }

}

答案 2 :(得分:0)

这对我有用:

try.map= {\
  one: 1,\
  two: 2\
}

代码:

@org.springframework.beans.factory.annotation.Value("#{${try.map}}")
HashMap<String, String> tryMap;

是的,语法很奇怪。

此SO帖子具有更多信息: How to fill HashMap from java property file with Spring @Value