[英]XStream converter for XMLList (similar to Jaxb)
XStream是否支持類似於JAXB的xml列表?( https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlList.html )
例如:
@XmlRootElement
public class MyClass {
@XmlElement
@XmlList
List<Integer> values;
//+ getter & setters
}
產生:
<myClass>
<values>1 2 3 4 5</values>
</myClass>
我找不到任何執行此操作的轉換器。 實際上,似乎有一個轉換器com.thoughtworks.xstream.converters.collections.BitSetConverter ,可將BitSet序列化為逗號分隔列表。
您可以創建一個自定義SingleValueConverter來轉換列表:
public class IntegerListConverter implements SingleValueConverter {
@Override
public boolean canConvert(Class clazz) {
return List.class.isAssignableFrom(clazz);
}
@Override
public Object fromString(String arg0) {
Collection<Integer> collection = new ArrayList<Integer>();
String[] integerStrings = arg0.split(" ");
for (int i = 0; i < integerStrings.length; i++) {
collection.add(Integer.valueOf(integerStrings[i]));
}
return collection;
}
@Override
public String toString(Object arg0) {
List collection = (List) arg0;
StringBuffer sb = new StringBuffer();
boolean first = true;
for (Object object : collection) {
if (first) {
first = false;
} else {
sb.append(' ');
}
sb.append(object.toString());
}
return sb.toString();
}
}
List<Integer>
是通用接口這一事實使事情變得有些復雜。 canConvert
此實現將對包含Integers之外的其他內容的List給出誤報。 我不確定clazz參數是否包含足夠的信息來確定泛型類型參數。 因此,最安全的方法可能是將轉換器僅分配給該單個字段:
public class MyClass {
@XStreamConverter(IntegerListConverter.class)
List<Integer> values;
//+ getter & setters
}
同樣, fromString
此實現將始終生成ArrayList,但我懷疑應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.