java - 杰克逊反序列化为子元素列表
问题描述
我有一个看起来像这样的 xml
<Trade>
<row>
<TradeID>1</TradeID>
</row>
<row>
<TradeID>2</TradeID>
</row>
</Trade>
我想将其反序列化为对象列表。现在我知道我能做到
public class Trade{
List<Row> rows;
public class Row{
int tradeID;
}
}
但理想情况下,我想避免完全基于外部标签创建一个类,因为它毫无价值。有什么办法可以将这个 xml 直接反序列化为List<Row>?
解决方案
如果您想List<Row>
直接反序列化,您可以在xmlMapper#readValue中指定所需的 valueType
String xml =
"<Trade>\r\n"
+ " <row>\r\n"
+ " <TradeID>1</TradeID>\r\n"
+ " </row>\r\n"
+ " <row>\r\n"
+ " <TradeID>2</TradeID>\r\n"
+ " </row>\r\n"
+ "</Trade>\r\n"
+ "";
XmlMapper xmlMapper = new XmlMapper();
List<Row> rows = Arrays.asList(xmlMapper.readValue(xml, Row[].class));
System.out.println(rows);
印刷:
[Row [tradeId=1], Row [tradeId=2]]
和行类:
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
@JacksonXmlRootElement(localName = "row")
public class Row {
@JacksonXmlProperty(localName = "TradeID")
private int tradeId;
public int getTradeId() {
return tradeId;
}
public void setTradeId(int tradeId) {
this.tradeId = tradeId;
}
@Override
public String toString() {
return "Row [tradeId=" + tradeId + "]";
}
}
推荐阅读
- delphi - 是否可以使用 QuickReport 的 QRLabel 创建超链接
- python - python中范围值的平均值
- c++ - C++ 中 if/else 分支的编译时消除
- python - 使用 FormView 保存在 django 表单中
- javascript - 将一个 div 和一个链接插入 div 两次,并使用多个链接进行此操作?JS
- python - 使用系列作为输入,如何在 pandas 数据框中找到具有匹配值的行?例如 df.loc[系列]?
- excel - 是否可以将多个单元格合并为一个同时省略空单元格?
- sqlite - 带有 SQLITE3 的 GO API 无法从数据库中删除元组
- groovy - 在 Spock “cleanup” 方法中获取测试结果
- android - 无法使用合并标签解析布局