【发布时间】:2020-11-23 19:16:51
【问题描述】:
我需要生成这个 XML:
<CRequest>
<abc:Name>Smith</abc:Name>
<abc:FirstName>John</abc:Surname>
<abc:Age>12</abc:Age>
<abc:Name>Jones</abc:Name>
<abc:FirstName>Jake</abc:Surname>
<abc:Age>10</abc:Age>
<abc:Name>Johnson</abc:Name>
<abc:FirstName>Paul</abc:Surname>
<abc:Age>12</abc:Age>
</CRequest>
但是,我能做的最好的事情是:
<CRequest>
<children>
<abc:Name>Smith</abc:Name>
<abc:FirstName>John</abc:Surname>
<abc:Age>12</abc:Age>
</children>
<children>
<abc:Name>Jones</abc:Name>
<abc:FirstName>Jake</abc:Surname>
<abc:Age>12</abc:Age>
</children>
<children>
<abc:Name>Johnson</abc:Name>
<abc:FirstName>Paul</abc:Surname>
<abc:Age>12</abc:Age>
</children>
</CRequest>
我有以下 Java 类:
@JsonRootName("CRequest")
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class ChildrenRequest {
@JacksonXmlElementWrapper(useWrapping = false)
private List<Child> children= new ArrayList<>();
...
和
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonPropertyOrder({"Name", "FirstName", "Age"})
public class Child{
@JsonProperty("Name")
@JacksonXmlProperty(localName = "abc:Name")
private String name;
@JsonProperty("Surname")
@JacksonXmlProperty(localName = "FirstName")
private String firstName;
@JsonProperty("Age")
@JacksonXmlProperty(localName = "abc:Age")
private String age;
...
有没有办法去掉子标签?
PS:如果没有“useWrapping = false”,我会为每个孩子获得两个孩子标签。
【问题讨论】:
-
不确定是否有 XML 等价物,但 JsonUnwrapped 注释对我来说可以在 JSON 中做同样的事情 - fasterxml.github.io/jackson-annotations/javadoc/2.8/com/…
-
虽然老实说 useWrapping = false 听起来确实是一回事。想一想,我从来没有在对象列表上使用过它,只有在对象图中跳过一个级别时才使用它。我猜这个列表可能是问题,因为最终的 XML 看起来有点不标准
标签: java xml serialization jackson