java - Jackson XmlMapper 映射嵌套元素的 XML 属性
问题描述
我正在尝试将 XML 解析为 Java 类,然后将其发送到前端。我正在使用 Springboot 2.2.5,Jackson 数据格式 xml 2.10.2
我有以下 XML 文件:
<root xmlsn="...">
<result status="1" outs="6" val="0" pic="7"/>
</root>
我希望从前端的后端得到这个响应:
{
status: 1,
outs: 6,
val: 0
pic: 7
}
嗯,这非常容易。
让我们看看,我有什么:
根元素的类:
@JacksonXmlRootElement(namespace = "...", localName = "root")
public class SetXmlResponseDto {
@JacksonXmlProperty(localName = "result")
private ResultPropertyDto result;
}
然后为结果元素 ResultPropertyDto 分类:
public class ResultPropertyDto {
@JacksonXmlProperty(localName = "val", isAttribute = true)
private String value;
@JacksonXmlProperty(localName = "status", isAttribute = true)
private String status;
}
// 我删除了 brewity (setter,getter) 的部分代码
但是这样做的结果如下:
{
result: {
status: 1,
....
}
}
还可以提一下我是如何构建它的?
ObjectMapper objectMapper = new XmlMapper();
objectMapper().readValue(new URL(urlAddress), SetXmlResponseDto.class);
当然,我可以SetXmlResponseDto.getStatus()
在将它发送到前端之前调用它,输出将完全符合预期,但我想知道,有没有办法在不创建子类的情况下实现所需的结果ResultPropertyDto
?
想象一下,您在 XML 中有 4 次嵌套元素,并且只想映射这个嵌套元素的 1 个属性。我必须为此创建4个类?
感谢您的回答
解决方案
如果您想避免创建深层嵌套结构,您始终可以使用xpath。
从提到的文档参考:
考虑以下 widget.xml 文件
<widgets>
<widget>
<manufacturer/>
<dimensions/>
</widget>
可以使用以下 XPath API 代码选择元素:
// parse the XML as a W3C Document
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new File("/widgets.xml"));
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget";
Node widgetNode = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
通过对元素的引用,现在可以编写相对 XPath 表达式来选择子元素:
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "manufacturer";
Node manufacturerNode = (Node) xpath.evaluate(expression, widgetNode, XPathConstants.NODE);
推荐阅读
- html - Bootstrap v5,我想在 lg 屏幕上显示图像列作为第二列,在小屏幕上显示第一列
- excel - 是否可以从 5000+ Word .docx 文件中批量提取坐标格式的文本(iiiiii,iiiiii)到 Excel 电子表格?
- html - 如何在特定图像点上放置按钮,图像显示为 object-fit:cover
- r - 如何控制 dplyr/tidyr 序列
- python - scipy.optimize.curve_fit 失败双高斯拟合
- excel - 根据日期范围更新数据透视字段,更新数据集后复制和粘贴
- reactjs - 执行“纱线启动”命令时“错误命令失败,退出代码为 1。”
- .net - 嵌套 System.RuntimeType 对象自动更改地址
- python - 读取子文件夹 python
- django - Django Queryset GET(1 个结果)检查一个字段的 MAX 值