[英]Jackson XML map repeating element groups
使用Jackson,我必須創建一個可以編組為以下XML的Java類。
<Root>
<Key>key1</Key>
<Value>value1</Value>
<Key>key2</Key>
<Value>value2</Value>
...
</Root>
后續課程已關閉,但Key
和Value
的順序不正確。
@JacksonXmlRootElement(localName = "Root")
class Root {
@JacksonXmlProperty(localName = "Key")
private String[] keys;
@JacksonXmlProperty(localName = "Value")
private String[] values;
}
如何創建一個類,以正確的順序映射到重復的元素對?
我做的! 借助自定義序列化程序。
首先,根元素:
@JacksonXmlRootElement(localName = "Root")
class Root {
@JacksonXmlElementWrapper(useWrapping = false)
private List<Wrapper> keyValueList;
// getters, setters
}
Key
和Value
對的包裝器類:
@JsonSerialize(using = WrapperSerializer.class)
class Wrapper {
private String key;
private String value;
// getters, setters, all args constructors
}
和序列化器:
public class WrapperSerializer extends StdSerializer<Wrapper> {
public WrapperSerializer() {
this(Wrapper.class);
}
protected WrapperSerializer(Class<Wrapper> t) {
super(t);
}
@Override
public void serialize(Wrapper value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeRaw(new StringBuilder()
.append("<Key>")
.append(value.getKey())
.append("</Key>")
.append("<Value>")
.append(value.getValue())
.append("</Value>")
.toString());
}
}
讓我們測試一下:
Root ref = new Root();
ref.setKeyValueList(Arrays.asList(
new Wrapper("k1", "v1"),
new Wrapper("k2", "v2")));
XmlMapper xmlMapper = new XmlMapper();
String output = xmlMapper.writeValueAsString(ref);
System.out.println(output);
結果:
<Root><Key>k1</Key><Value>v1</Value><Key>k2</Key><Value>v2</Value></Root>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.