【问题标题】:how to load map from properties file with spring如何使用弹簧从属性文件加载地图
【发布时间】:2015-04-14 05:36:56
【问题描述】:

我正在尝试将 .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

任何想法如何为此创建映射策略?

【问题讨论】:

  • 您有自己的转换器并将其添加到coverationService。

标签: java spring


【解决方案1】:

没有默认的转换器。所以你必须编写自己的转换器并将其注册到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
    }

}

【讨论】:

  • @Gleeb 你能解释一下原因吗?
  • 仍然出现同样的错误。我的应用程序中有一个对话服务。我将通过确认更新问题,可能配置不正确
  • 如果转换器被调用,你能尝试调试你的代码吗?请检查您是否在项目中使用注解配置。
  • 好的,这可行,但存在一个问题,在某些地方,一些配置文件在转换服务 bean 之前加载,我如何保证转换服务在任何其他 bean 之前加载?
  • 我认为 spring 会在创建 bean 之前加载转换器。所以你不能有这样的情况。如果您遇到问题,您可以使用@DependsOn 注释来保证会话服务在 bean 之前加载。希望这会有所帮助。
【解决方案2】:

我也遇到了这个错误。如果您想在不付出太多努力的情况下解决它,只需正确检查您的导入即可。 如果您导入错误的文件,大多数情况下您会收到此错误。对于您,我认为您在文件中导入了错误的 HashMap。检查它应该是 java.util.HashMap。

【讨论】:

    【解决方案3】:

    这对我有用:

    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

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2017-05-06
      • 2018-01-16
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      相关资源
      最近更新 更多