XMLAdapter for HashMap

den*_*iss 6 java jax-rs jaxb jersey

我想转换我的payaload中的项目列表并将它们转换为hashmap.基本上,我有一个Item xml表示,它有一个ItemID列表.每个ItemID都有一个idType.但是,在我的Item类中,我希望这些ItemID表示为Map.

HashMap<ItemIDType, ItemID>
Run Code Online (Sandbox Code Playgroud)

传入的有效负载将此表示为列表

<Item>...
    <ItemIDs>
       <ItemID type="external" id="XYZ"/>
       <ItemID type="internal" id="20011"/>
    </ItemIDs>
</Item>
Run Code Online (Sandbox Code Playgroud)

但我想要一个适配器,将其转换为HashMap

"external" => "xyz"
"internal" => "20011"
Run Code Online (Sandbox Code Playgroud)

我现在正在使用LinkedList

public class MapHashMapListAdapter extends XmlAdapter<LinkedList<ItemID>, Map<ItemIDType, ItemID>> {

     public LinkedList<ItemID> marshal(final Map<ItemIDType, ItemID> v) throws Exception { ... }

     public Map<ItemIDType, ItemID> unmarshal(final LinkedList<ItemID> v) throws Exception { ... }

}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,当我的有效负载被转换时,它无法将列表转换为散列映射.方法unmarshal的传入LinkedList是一个空列表.你们知道我在这里做错了吗?我是否需要在此处创建自己的数据类型来处理LinkedList?

bdo*_*han 5

而不是转换Map为a,LinkedList您需要将其转换为域对象.

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public final class MyMapAdapter extends

   XmlAdapter<MyMapType,Map<Integer, String>> {

   @Override
   public MyMapType marshal(Map<Integer, String> arg0) throws Exception {
      MyMapType myMapType = new MyMapType();
      for(Entry<Integer, String> entry : arg0.entrySet()) {
         MyMapEntryType myMapEntryType =
            new MyMapEntryType();
         myMapEntryType.key = entry.getKey();
         myMapEntryType.value = entry.getValue();
         myMapType.entry.add(myMapEntryType);
      }
      return myMapType;
   }

   @Override
   public Map<Integer, String> unmarshal(MyMapType arg0) throws Exception {
      HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
      for(MyMapEntryType myEntryType : arg0.entry) {
         hashMap.put(myEntryType.key, myEntryType.value);
      }
      return hashMap;
   }

}
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息