在spring hash Map中具有多个值的映射

时间:2018-05-22 10:19:00

标签: java spring dictionary properties

是否可以在spring中为地图添加多个值,例如,我有以下弹簧地图

 <property name="abcMap">
     <map>
         <entry key="615000" value="def"/>
     </map>
 </property>

我想要实现的目标如下

<property name="abcMap">
    <map>
        <entry key="615000" value="def" value="abc"/>
    </map>
</property>

请告知我们如何在Spring中实现同样的目标。

4 个答案:

答案 0 :(得分:1)

根据定义,地图不能为同一个键提供两个值(如果是java,则可以将它们放在列表中,但事实并非如此)。

作为一种解决方案,您可以将它们连接起来,用“,”之类的定义字符分隔,或者为每个值使用不同的键。

答案 1 :(得分:1)

如果要为给定键存储多个值,则值必须是列表:

<property name="abcMap">
    <map>
        <entry>
            <key>
                <value>615000</value>
            </key>
            <list>
                <value>def</value>
                <value>abc</value>
            </list>
        </entry>
    </map>
</property>

答案 2 :(得分:0)

您需要先创建列表。然后该列表可以插入地图中。

<list id="list1">
  <value>abc</value>
  <value>def</value>

<map id="emailMap" value-type="java.util.List">
  <!-- Map between String key and List -->
  <entry key="entry1" value-ref="list1" />
  <entry key="entry2" value-ref="list2" />
<map>

然后在你的任何bean中使用这个Map:

    <bean id="myBean" class="com.sample.beans">
      <property name="emailMap" ref="emailMap" />
   </bean>

答案 3 :(得分:0)

使用MultiValueMap会很酷。不幸的是,spring xsd不支持它们。以下是相关摘录:

<xsd:group name="collectionElements">
  <xsd:sequence>
    <xsd:element ref="description" minOccurs="0"/>
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element ref="bean"/>
      <xsd:element ref="ref"/>
      <xsd:element ref="idref"/>
      <xsd:element ref="value"/>
      <xsd:element ref="null"/>
      <xsd:element ref="list"/>
      <xsd:element ref="set"/>
      <xsd:element ref="map"/>
      <xsd:element ref="props"/>
      <xsd:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:choice>
  </xsd:sequence>
</xsd:group>

正如其他人所建议的那样,您可以使用列表作为值的地图。