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?
而不是转换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)
欲获得更多信息
| 归档时间: |
|
| 查看次数: |
10206 次 |
| 最近记录: |