如果我在根元素上声明了名称空间,像这样:
@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属性不应出现在子元素上。
我该如何存档?
答案 0 :(得分:4)
有一种变通方法,我觉得这对我来说更优雅。
您可以像这样为您的命名空间定义常量:
@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;
}
答案 1 :(得分:2)
您需要在每个属性中指定与根元素相同的名称空间:
@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;
}
这有点烦人,但这是我发现避免不必要的名称空间的唯一方法。
答案 2 :(得分:0)
还可以与不可变库和json注释一起使用(如果您需要同时在JSON和XML中进行序列化/反序列化)
@Value.Immutable
@JsonRootName(value = "PersonData", namespace = "urn:stackify:jacksonxml")
public interface Person extends Serializable {
}