1 回答

TA貢獻1812條經(jīng)驗 獲得超5個贊
您可以使用適配器來做到這一點,但據(jù)我了解您的要求,這是沒有必要的。如果您只是想解組為對象而不是 Map,則可以執(zhí)行以下操作:
從根開始:
@XmlRootElement(name = "ACCOUNT_CHANGES")
@XmlAccessorType(XmlAccessType.FIELD)
public class AccountChanges {
@XmlElement(name = "TYPE")
private Type type;
@XmlElement(name = "RECORD")
private Record record;
}
讓我們把 Type 去掉:
@XmlAccessorType(XmlAccessType.FIELD)
public class Type {
@XmlAttribute
private String value;
}
然后記錄一下:
@XmlAccessorType(XmlAccessType.FIELD)
public class Record {
@XmlElement(name = "SUBSCRIPTION")
private Subscription subscription;
}
以及訂閱:
@XmlAccessorType(XmlAccessType.FIELD)
public class Subscription {
@XmlElement(name = "INFO")
private List<Info> infoList;
}
信息將您的鍵作為屬性,然后是一些值。它看起來像這樣:
@XmlAccessorType(XmlAccessType.FIELD)
public class Info {
@XmlAttribute
private String key;
@XmlValue
private String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}
這將解組您的 xml,并且信息鍵和值將位于字段中。如果您想要映射中的鍵和值,可以使用適配器。
適配器看起來像這樣:
public class MyMapAdapter extends XmlAdapter<Info, Map<String, String>> {
private HashMap<String, String> hashMap = new HashMap<String, String>();
@Override
public Map<String, String> unmarshal(Info v) throws Exception {
hashMap.put(v.getKey(), v.getValue());
return hashMap;
}
@Override
public Info marshal(Map<String, String> v) throws Exception {
// do here actions for marshalling if u also marshal
return null;
}
}
您將更改訂閱以使用適配器并將地圖作為字段:
@XmlAccessorType(XmlAccessType.FIELD)
public class Subscription {
@XmlElement(name = "INFO")
@XmlJavaTypeAdapter(MyMapAdapter.class)
private Map<String, String> infoMap;
}
有兩種方法,都可以解組您的 xml 有效負載。
添加回答
舉報