[英]Jackson Xml: How to add namespace only on root?
如果我在根元素上聲明命名空間,如下所示:
@JacksonXmlRootElement(namespace = "urn:stackify:jacksonxml", localName = "PersonData")
public class Person {
private String id;
private String name;
private String note;
}
它產生:
<PersonData xmlns="urn:stackify:jacksonxml">
<id xmlns="">12345</id>
<name xmlns="">Graham</name>
<note xmlns="">Hello</note>
</PersonData>
但我只想要根元素上的命名空間。 xmlns 屬性不應出現在子元素上。
我該如何存檔?
有一種解決方法,我發現它對我來說更優雅。
您可以像這樣為命名空間定義常量:
@JacksonXmlRootElement(localName = "PersonData")
public class Person {
@JacksonXmlProperty(isAttribute = true)
private final String xmlns = "urn:stackify:jacksonxml";
private String id;
private String name;
private String note;
}
您需要在每個屬性中指定與根元素相同的命名空間:
@JacksonXmlRootElement(namespace = "urn:stackify:jacksonxml", localName = "PersonData")
public class Person {
@JacksonXmlProperty(namespace = "urn:stackify:jacksonxml")
private String id;
@JacksonXmlProperty(namespace = "urn:stackify:jacksonxml")
private String name;
@JacksonXmlProperty(namespace = "urn:stackify:jacksonxml")
private String note;
}
它有點煩人,但這是我發現避免不必要的命名空間的唯一方法。
也適用於不可變庫和 json 注釋(如果您需要在 JSON 和 XML 中序列化/反序列化)
@Value.Immutable
@JsonRootName(value = "PersonData", namespace = "urn:stackify:jacksonxml")
public interface Person extends Serializable {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.