在使用Jackson序列化为XML时,我似乎遇到了一个问题。我的代码如下:
测试容器
package com.test;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TestContainer {
private String testContainerID;
private String testContainerMessage;
private ArrayList<TestChild> testContainerChildren;
@JsonProperty("TestContainerID")
public String getTestContainerID() {
return testContainerID;
}
@JsonProperty("TestContainerID")
public void setTestContainerID(String testContainerID) {
this.testContainerID = testContainerID;
}
@JsonProperty("TestContainerMessage")
public String getTestContainerMessage() {
return testContainerMessage;
}
@JsonProperty("TestContainerMessage")
public void setTestContainerMessage(String testContainerMessage) {
this.testContainerMessage = testContainerMessage;
}
@JsonProperty("TestContainerChildren")
public ArrayList<TestChild> getTestContainerChildren() {
return testContainerChildren;
}
@JsonProperty("TestContainerChildren")
public void setTestContainerChildren(ArrayList<TestChild> testContainerChildren) {
this.testContainerChildren = testContainerChildren;
}
}
测试儿童
package com.test;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
@JsonRootName(value="TestChild")
public class TestChild {
private String testChildID;
private String testChildMessage;
@JsonProperty("TestChildID")
public String getTestChildID() {
return testChildID;
}
@JsonProperty("TestChildID")
public void setTestChildID(String testChildID) {
this.testChildID = testChildID;
}
@JsonProperty("TestChildMessage")
public String getTestChildMessage() {
return testChildMessage;
}
@JsonProperty("TestChildMessage")
public void setTestChildMessage(String testChildMessage) {
this.testChildMessage = testChildMessage;
}
}
用
> < li>
序列化:
XmlMapper xm = new XmlMapper();TestContainer tc = xm.readValue(sb.toString(), TestContainer.class);
反序列化:
System.out.println(xm.writeValueAsString(tc));tc=xm.readValue(sb.toString(),TestContainer.class);
我正在做的是从类路径上的文件夹加载一个 XML 文件,并将该文件的内容放入 StringBuffer 中。问题是为对象集合生成的 XML。在编写XML时,我想要这样的东西:
<TestContainerChildren><TestChild><...(Element Details)...></TestChild></TestContainerChildren>
但我得到了:
<TestContainerChildren><TestContainerChildren><...(Element Details)...><TestContainerChildren></TestContainerChildren>
我不知道我在这里错过了什么。我对序列化/反序列化的JSON部分没有问题,只有XML。我尝试使用Jackson和JAXB注释来关闭包装,我尝试使用以下注释:
我很确定这是我做的一件蠢事,但是任何帮助都是我最感激的。
好了,注意一下。首先,< code>@JsonRootName只影响用于XML文档根的名称,顾名思义。因此它不用于< code>TestChild。第二,听起来你想对列表使用所谓的“展开”输出,省略包含列表元素的属性的元素。这可以通过以下方式实现:
@JacksonXmlElementWrapper(useWrapping=false)
@JsonProperty("TestContainerChildren")
public ArrayList<TestChild> getTestContainerChildren() { ... }
由于默认设置是使用包装器(这与JAXB不同,后者的默认值是未包装)。或者,如果您想全局更改此设置以假定未包装为默认值,您可以通过XmlModule
更改默认值:
JacksonXmlModule module = new JacksonXmlModule();
// to default to using "unwrapped" Lists:
module.setDefaultUseWrapper(false);
XmlMapper xmlMapper = new XmlMapper(module);
希望这有帮助!
我通过在变量声明上方使用以下注释来实现这一点:
这是RTFM的一个简单例子,正如这里所记录的。