从属性文件中读取Map并使用spring注释加载@Value

时间:2013-11-21 12:01:52

标签: java spring

我有一个(键/值)列表需要填充到spring bean上的地图:

dmin.details.fieldsMap=name,Abdullah,\
             street,Zayed,\
             phone,+201020102010

我使用下面的列表正常工作:

属性:

  

dmin.details.fields =阿卜杜拉扎耶德,+ 201020102010

调用

@Value("#{'${dmin.details.fields}'.split(',')}")
private List<String> fields;

有人可以建议在春天这样做吗?

3 个答案:

答案 0 :(得分:13)

application.properties:

property.map={first:value, second:value}

然后在Java代码中你可以:

@Value("#{${property.map}}")
Map<String, String> map;

答案 1 :(得分:1)

由于我在春天没有找到任何方式将地图作为地图阅读,我必须使用春天填写的列表填写地图,如下所示:

@Value("#{'${dmin.details.fields}'.split(',')}")
private List<String> fields;

private Map<String, String> fieldsMap;

@PostConstruct
public void init() {
    fieldsMap = new HashMap<String, String>();
    if (fields != null && fields.size() != 0) {
        for (String field : fields) {
            String[] splittedField = field.split(",");
            fieldsMap.put(splittedField[0], splittedField[1]);
        }
    }
}

答案 2 :(得分:0)

我发现了一个稍有不同的情况,并在下面进行了说明,以防万一有人在寻找它。

  1. 我在属性文件中有trade_id_date = {'123WC':'20100125','234W':'20100125',1689332:'20100125'}
  2. 在Java类中

    @Value(“#{$ {trade_id_date}}”) 私人地图tradeIdDateMap;

如果您不将左侧用字母数字括起来,则将得到

Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException
@0: EL1044E: Unexpectedly ran out of input
  1. 因此请确保将其用单引号引起来