【问题标题】:How do I load a list of numbers from a spring properties file [duplicate]如何从弹簧属性文件中加载数字列表[重复]
【发布时间】:2017-07-11 10:40:45
【问题描述】:

我需要从提供逗号分隔整数的属性文件中加载java.util.List<Integer>

ids = 1230, 34, 2587, 31

到目前为止,我已经尝试了具有上述内容的identifiers.properties 文件并将其加载到带有spring xml 文件的bean 中:

    <bean id="identifiersList" class="MyIdHolderClass">
        <property name="idsList" value="${ids}"/>
    </bean>

但我收到一个错误,因为 java.util.List&lt;Integer&gt; ids 无法存储字符串,这是 Spring 试图放入其中的内容。

有没有办法从属性文件中弹出一个数字列表?

仅用于上下文:我想要实现的是从属性文件加载Map&lt;Integer, Float&gt;。但是未能加载它,我决定将其拆分为加载键和加载值。 (它最终会以地图的形式显示每个产品标识符的价格标签)。

【问题讨论】:

  • 为什么是 .properties 文件而不是更适合保存 json 或 xml 之类的数组/列表数据的文件?
  • @Thomas 我也想到了,但是从外部源导出数据更容易实现属性格式。要使 .xml 正常工作,需要大量编辑才能将所有标签添加到位。除非你有什么好的建议...
  • 在建议的问题中确实解决了。

标签: java spring properties


【解决方案1】:

我认为你应该注入这样的属性:

<bean id="identifiersList" class="MyIdHolderClass">
   <property name="idsList" value="#{'${ids}'.split(',')}"/>
</bean>

【讨论】:

  • 如果您将DefaultConversionService 公开为一个bean,您将不需要在SpEL 中split
【解决方案2】:

尝试将此 bean 添加到您的配置中:

@Bean 
public ConversionService conversionService() {
    return new DefaultConversionService();
}

它将增加对将 String 转换为 Collection 的支持:

请注意,DefaultConversionService 会自动注册适用于大多数环境的转换器。这包括集合转换器、标量转换器以及基本的对象到字符串转换器。可以使用 DefaultConversionService 类上的静态 addDefaultConverters 方法向任何 ConverterRegistry 注册相同的转换器。

参考:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

【讨论】:

  • 这个答案——在suggested question 中有详细说明——是我最终得到的答案。非常方便,无需拆分字符串并将标记转换为Float
  • 虽然 Maciej 的帖子在今天更加准确,因为使用拼写表达式更容易做到这一点。
  • @MrChow 使用 SpEL 可不容易做到这一点。在配置文件中公开一次 bean 比在连接列表的任何地方添加 .split(',')} 容易得多。此外,如果编码人员忘记添加 .split(',')},该列表仍将被填充,因此遗漏可能不会立即显现。
  • @Paul 那很公平
猜你喜欢
  • 2015-12-15
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2012-09-16
  • 2017-05-06
相关资源
最近更新 更多