Подтвердить что ты не робот

Как ввести карту <String, List> в java springs?

Как вставить карту в java spring framework? Если возможно, укажите пример кода.

Является ли следующий законным?

<property name="testMap">
    <map>
        <entry>
            <key>
                <value>test</value>
            </key>
            <value>
                <list>
                    <value>String</value>
                    <value>String</value>
                </list>
            </value>
        </entry>
    </map> 
</property>
4b9b3361

Ответ 1

Определите карту, подобную этой первой, внутри вашего applicationContext.xml:

   <util:list id="list1">
      <value>[email protected]</value>
      <value>[email protected]</value>
   </util:list>

   <util:list id="list2">
      <value>[email protected]</value>
      <value>[email protected]</value>
   </util:list>

   <util: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" />
      ...
   </util:map>

Затем используйте эту Карту в любом bean вашего типа:

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

Ответ 2

Я думаю, что ваш синтаксис не является законным как spring throws org.xml.sax.SAXParseException при обработке конфигурации bean xml.

Он должен работать после удаления тега <value> вокруг <list>.

<property name="testMap">
    <map>
        <entry>
            <key>
                <value>test</value>
            </key>

             <list>
                    <value>String</value>
                    <value>String</value>
             </list>
        </entry>
    </map> 
</property>

Ответ 3

Это мой пример:

    <bean class="com.common.handlermgmnt.HandlerMapAdder">
        <constructor-arg index="0" type="java.util.Map">
            <map key-type="java.lang.String" value-type="com.common.ViewWidget">
                <entry key="DefaultView">
                    <bean class="com.common.DefaultViewWidget"/>
                </entry>
                <entry key="AnotherView">
                    <bean class="com.common.AnotherViewWidget"/>
                </entry>
            </map>
        </constructor-arg>
        <constructor-arg index="1" type="com.common.handlermgmnt.HandlerManager" ref="widget_handlerManager"/>
    </bean>

Ответ 4

Просто наткнулся на это дело. Если нет необходимости повторно использовать значения списка как независимые beans в других местах, вы можете использовать эту более короткую версию, не используя 'value-ref':

<util:map id="mymap">
    <entry key="key1">
        <util:list>
            <value>val1</value>
            <value>val2</value>
        </util:list>
    </entry>
    <entry key="key2">
        <util:list>
            <value>val2</value>
            <value>val3</value>
            <value>val4</value>
        </util:list>
    </entry>
</util:map> 

И подключите его в своем Java-коде следующим образом:

@Resource(name="mymap")
Map<String, List<String>> mapKey_List;

Ответ 5

Внесите его с помощью SpEL. #{Я бы}. это работает для меня.

в .xml:

<util:map id="roleLocationMap">
    <entry key="ROLE_ADMIN" value-ref="listA" />
    <entry key="ROLE_USER" value-ref="listB" />
</util:map>

в .java

@Autowired
public MainController(
        @Value("#{roleLocationMap}") final Map<String, List<String>> roleLocationMap) {
    this.roleLocationMap = roleLocationMap;
}