[英]Jackson XML Serialization: Nested Element with Same Name as Parent
我有一個復雜的 xml 類型,其中包含一個名稱與父元素相同的嵌套元素,但是當我對其進行序列化時,嵌套元素在包含在另一個元素中時被設置為父元素的文本。
DTO 看起來像這樣:
@JacksonXmlRootElement(localName = "address")
public class Address{
@JacksonXmlText(false)
@JsonProperty
private String address;
@JsonProperty
private String city;
//getters and setters
}
@JacksonXmlRootElement(localName = "person")
public Person {
private String name;
private Address address;
}
我的 XmlMapper 配置:
XmlMapper xmlMapper = XmlMapper.xmlBuilder()
.defaultUseWrapper(false)
.serializationInclusion(NON_NULL)
.build();
xmlMapper.getFactory()
.getXMLOutputFactory()
.setProperty("javax.xml.stream.isRepairingNamespaces", false);
當我自己序列化一個地址時,我得到了預期值:
<address><address>123 East Street</address><city>metropolis</city></address>
但是當我將 Address 序列化為另一個 DTO 的嵌套對象時,例如 Person,則 address 屬性將序列化為 Address 父對象的文本。
實際的 XML:
<person><address>123 East Street<city>metropolis</city></address></person>
預期的 XML:
<person><address><address>123 East Street</address><city>metropolis</city></address></person>
我已經知道這只是糟糕的XML 設計,但這就是我必須做的!
關於如何獲得預期的 XML 輸出的任何想法?
我通過創建另一個帶有標記為文本的“值”字段的 DTO 找到了一種解決方法。
@JacksonXmlRootElement(localName = "address")
public class StreetAddress{
@JacksonXmlText
private String value;
//getters and setters
}
//snip
@JacksonXmlRootElement(localName = "address")
public class Address{
@JsonProperty
private StreetAddress address;
@JsonProperty
private String city;
//getters and setters
}
當按如下方式連接 DTO 時,XML 輸出將按預期生成。 我使用了jackson-annotations
和jackson-dataformat-xml
2.10
版。 除了額外的 getter 和 setter 之外,與代碼沒有區別。
Address a = new Address();
a.setCity("metropolis");
a.setAddress("123 East Street");
Person p = new Person();
p.setAddress(a);
xmlMapper.writeValue(new PrintWriter(System.out), p);
輸出
<person><address><address>123 East Street</address><city>metropolis</city></address></person>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.