【问题标题】:Map having multiple values in spring hash Map在 Spring 哈希 Map 中具有多个值的映射
【发布时间】:2018-05-22 10:18:59
【问题描述】:

是否可以在spring中给一个map添加多个值,比如我有下面这个spring map

 <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 中实现相同的目标。

【问题讨论】:

    标签: java spring dictionary properties


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您想为给定键存储多个值,则该值需要是一个列表,例如:

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

      【讨论】:

        【解决方案3】:

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

        <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>
        

        【讨论】:

          【解决方案4】:

          使用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>
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-13
            相关资源
            最近更新 更多