【发布时间】:2016-06-17 10:40:52
【问题描述】:
我在编组时使用@XmlJavaTypeAdapter 将Map<Key, Value> 对象转换为List<Value>,反之则在取消编组时
然后是我得到的XML:
<map>
<value>VALUE1</value>
...
</map>
我的问题是:我怎样才能摆脱周围的标签以获得
<value>VALUE1</value>
Bean 类
@XmlAccessorType(XmlAccessType.FIELD)
public class Data implements Serializable {
/**
* Constant for data value default name
*/
public static final String DATA_VALUE_DEFAULT_NAME = "result";
/**
* Serial version UID
*/
private static final long serialVersionUID = 7387937212735185585L;
/**
* key
*/
@XmlAttribute
private String key;
/**
* name
*/
@XmlAttribute
private String name;
/**
* Map of data
*/
@XmlJavaTypeAdapter(MapDataAdapter.class)
private Map<String, Data> dataMap;
/**
* Constructor
*/
public Data() {
}
}
适配器
public class MapDataAdapter
extends XmlAdapter<MapDataAdapter.AdaptedDataMap,
Map<String, Data>> {
/**
* Adapted map
*/
public static class AdaptedDataMap {
/**
* List of entry
*/
@XmlElement(name = "data", required = true)
protected List<Data> entry = new ArrayList<>();
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Data> unmarshal(
AdaptedDataMap adaptedMap) throws Exception {
if (adaptedMap == null) {
return null;
}
Map<String, Data> map = new HashMap<>(adaptedMap.entry.size());
for (Data entry : adaptedMap.entry) {
map.put(entry.getKey(), entry);
}
return map;
}
/**
* {@inheritDoc}
*/
@Override
public AdaptedDataMap marshal(
Map<String, Data> map) throws Exception {
if (map == null) {
return null;
}
AdaptedDataMap adaptedMap = new AdaptedDataMap();
for (Entry<String, Data> mapEntry : map.entrySet()) {
adaptedMap.entry.add(mapEntry.getValue());
}
return adaptedMap;
}
}
XML 输出
<data key="12" name="TEST1">
<dataMap>
<data key="text" name="TEST2">
<dataMap>
<data key="azerty" name="TEST3">
</data>
</dataMap>
</data>
</dataMap>
</data>
我需要什么
<data key="12" name="TEST1">
<data key="text" name="TEST2">
<data key="azerty" name="TEST3">
</data>
</data>
</data>
【问题讨论】:
-
你能分享1)xml文件和2)bean类吗?
-
看看这个问题stackoverflow.com/questions/17024050/…应该能帮到你
-
我认为更好的答案是这个(它在同样的情况下对我有帮助):stackoverflow.com/a/3293744/1307309