如何使用 @Value Spring Annotation 注入 Map?

新手上路,请多包涵

如何在 Spring 中使用 @Value 注释将值从属性文件注入到 Map 中?

我的 Spring Java 类是,我尝试使用 $,但收到以下错误消息:

无法自动装配字段:private java.util.Map Test.standard;嵌套异常是 java.lang.IllegalArgumentException:无法解析字符串值“${com.test.standard}”中的占位符“com.test.standard”

 @ConfigurationProperty("com.hello.foo")
public class Test {

   @Value("${com.test.standard}")
   private Map<String,Pattern> standard = new LinkedHashMap<String,Pattern>

   private String enabled;

}

我在 .properties 文件中有以下属性

com.test.standard.name1=Pattern1
com.test.standard.name2=Pattern2
com.test.standard.name3=Pattern3
com.hello.foo.enabled=true

原文由 yathirigan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 961
2 个回答

我相信 Spring Boot 支持使用 @ConfigurationProperties 注释开箱即用地加载属性映射。

根据该文档,您可以加载属性:

 my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

像这样变成豆子:

 @ConfigurationProperties(prefix="my")
public class Config {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }
}

我之前使用过 @ConfigurationProperties 功能,但没有加载到地图中。您需要使用 @EnableConfigurationProperties 注释 来启用此功能。

此功能的妙处在于您可以 验证您的属性

原文由 luboskrnac 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 @Value 注释从属性文件将值注入到 Map 中,如下所示。

属性文件中的属性。

 propertyname={key1:'value1',key2:'value2',....}

在你的代码中。

 @Value("#{${propertyname}}")  private Map<String,String> propertyname;

请注意主题标签作为注释的一部分。

原文由 Michael Rahenkamp 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题