gpt4 book ai didi

java - HashMap 的 XMLAdapter

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:13 34 4
gpt4 key购买 nike

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

HashMap<ItemIDType, ItemID>

传入的有效负载将把它表示为一个列表

<Item>...
<ItemIDs>
<ItemID type="external" id="XYZ"/>
<ItemID type="internal" id="20011"/>
</ItemIDs>
</Item>

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

"external" => "xyz"
"internal" => "20011"

我现在正在使用 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 { ... }

}

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

最佳答案

不是将 Map 转换为 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;
}

}

了解更多信息

关于java - HashMap 的 XMLAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975068/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com