java - 用多个 XML 标签包装而不创建不同的类 + Jackson + Java
问题描述
我有这样的课:
class A {
@JacksonXmlElementWrapper(localName = "ErrorMessages")
@JacksonXmlProperty(localName = "ErrorMessage")
List<String> errorMessages;
}
输出是:
<A>
<ErrorMessages>
<ErrorMessage>
error1
</ErrorMessage>
<ErrorMessage>
error2
</ErrorMessage>
</ErrorMessages>
</A>
但我希望它是那样的
<A>
<ErrorMessages>
<ErrorMessages>
<ErrorMessage>
error1
</ErrorMessage>
</ErrorMessages>
<ErrorMessages>
<ErrorMessage>
error2
</ErrorMessage>
</ErrorMessages>
</ErrorMessages>
</A>
如何在Jackson
不添加更多课程的情况下实现这一目标?对你的帮助表示感谢。谢谢。
解决方案
您可以创建一个XmlAdapter
为您的errorMessages
字段生成任意 XML(在此答案中解释)。
例如,像这样注释你的类:
@XmlRootElement(name = "A")
class A {
@XmlElement(name = "ErrorMessages")
@XmlJavaTypeAdapter(ErrorMessagesAdapter.class)
List<String> errorMessages;
}
并实现您的 ErrorMessagesAdapter,例如:
class ErrorMessagesAdapter extends XmlAdapter<Object, List<String>> {
private DocumentBuilder documentBuilder;
public ErrorMessagesAdapter() {
super();
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
documentBuilder = dbf.newDocumentBuilder();
} catch(Exception e) {
// TODO: Handle Exception
}
}
@Override
public Object marshal(List<String> errorMessages) throws Exception {
Document doc = documentBuilder.newDocument();
Element root = doc.createElement("ErrorMessages");
for (String errorMessage : errorMessages) {
Element wrapperElement = doc.createElement("ErrorMessages");
Element errorMessageElement = doc.createElement("ErrorMessage");
errorMessageElement.setTextContent(errorMessage);
wrapperElement.appendChild(errorMessageElement);
root.appendChild(wrapperElement);
}
return root;
}
@Override
public List<String> unmarshal(Object v) throws Exception {
// TODO: implement unmarshalling
throw new UnsupportedOperationException();
}
}
这会产生以下输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<A>
<ErrorMessages>
<ErrorMessages>
<ErrorMessage>error1</ErrorMessage>
</ErrorMessages>
<ErrorMessages>
<ErrorMessage>error2</ErrorMessage>
</ErrorMessages>
</ErrorMessages>
</A>
推荐阅读
- html - 试图使 div 中的项目均匀分布
- google-apps-script - 例外:您无权调用 hideColumns(第 25 行)
- python - 使用 Basemap 绘制两个数组(一个作为颜色网格,另一个作为单个轮廓)
- python - 我有models.py 文件。我怎样才能为它写一个测试?测试什么?
- powershell - 用于更改本地主机名的 Powershell 脚本
- reactjs - 我只想显示映射的 URL 而不是项目 URL 混合
- syntax-error - 如何摆脱 Verilog 中“或”附近的语法错误
- react-native - 如何在反应本机路由器通量中使导航栏透明?
- google-cloud-platform - 同时处理 3 条发布子消息,将所有 3 条消息合并并将其存储在火存储中
- c# - 在 Windows 窗体 C Sharp 中显示 TabularData