簡體   English   中英

Jackson Xml:如何僅在 root 上添加命名空間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM