我的属性文件的内容如下
config.entry[0]=x-frame-options,sameorigin
config.entry[1]=内容安全策略,框架“self”
我想把它加载到一个config类中,在那里我可以把逗号分隔的值作为键、值对加载到一个集合中。如何在spring3中使用@configurationproperties实现这一点?
entries=config.getentry()应该为我提供一个集合,以便我可以迭代并获取属性文件中定义的名称-值对列表
for(Entry<String,String> index : config.getEntry().entryset()) {
index.getKey(); // Should Give - X-FRAME-OPTIONS
index.getValue(); // Should Give - SAMEORIGIN
}
我应该如何定义将以这种方式与属性文件中的值自动关联的配置类?
对于属性“entry[0]”,以下实现引发了spring异常“cannot convert value of type[java.lang.string]to required type[java.util.map]”:找不到匹配的编辑器或转换策略]
@Component
@ConfigurationProperties("config")
public class MyConfiguration {
private Map<String,Map<String,String>> entry = new LinkedHashMap<String,Map<String,String>>();
//getter for entry
//setter for entry
}
2条答案
按热度按时间jvlzgdj91#
你可以分两部分来做,第一部分是简单的
@ConfigurationProperties
这种方式:这将干净地将您的属性加载到
entry
你的领域SampleConfigProperties
天生的。接下来要做的不是spring的本机操作—您希望逗号分隔列表中的第一个字段是Map中的键,这是一个自定义逻辑,您可以使用@PostConstruct
这样的逻辑,看看我怎么还在用spring的conversionService
转换逗号分隔的String
到List<String>
:bejyjqdl2#
你可以试试
@PostConstruct
将在构造的bean之后调用的注解。您可以在这里加载配置文件并根据需要更新Map。例如: