![](/img/trans.png)
[英]How to map an Hashmap to key-value-attributes in XML using xstream
[英]How to make XStream map unmapped tags to an HashMap when parsing XML?
有一個我想轉換為 Java bean 的 XML 文檔。 我想將 bean 中缺失的字段標記為 hashMap,因為這些字段名稱不斷變化。 有沒有辦法做到這一點?
例如,我的 XML 看起來像
<employee>
<firstname>stack</firstname>
<lastname>alpha</lastname>
<phone1>999-999-9999</phone1>
</employee>
我的 java bean 看起來像
@XstreamAlias("employee")
public class Employee {
private String firstname;
private String lastname;
private map<String, String> unknownfields;
}
當我將 XML 加載到我的 java bean 時,它應該看起來像
firstname="stack", lastname="alpha", unknownfields=[{"phone1","999-999-9999"}]
知道這是一個糟糕的設計,但想檢查這是否可以使用 xstream 實現。
實現您自己的轉換器。 查看JavaBeanConverter以獲取參考實現,因為您希望盡可能接近它。
您需要以不同方式處理事情的唯一地方是這個(在解組方法中)
if (propertyExistsInClass) {
Class<?> type = determineType(reader, result, propertyName);
Object value = context.convertAnother(result, type);
beanProvider.writeProperty(result, propertyName, value);
seenProperties.add(new FastField(resultType, propertyName));
} else {
throw new MissingFieldException(resultType.getName(), propertyName);
}
在else塊中,它拋出MissingFieldException
,您應該填充您的Map
。 XML 元素名稱在這里很容易獲得,但您需要調整值。 獲取值的線索就在上面的if塊中:
Object value = context.convertAnother(result, type);
唯一的問題是您沒有將值轉換為的 Java 類型。 可能是字符串?
我會繼承JavaBeanConverter
並只覆蓋unmarshal
方法,但適合您的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.