[英]Xml parsing to Java object
我有这样的xml:
<EVENTSTREAM id="2016050408105300002" name="LATESTWINNERS" rc="0">
<ROUND id="2016050309342400001" nyxid="2016050309342400003">
<TIMESTAMP>2016-05-03T09:34:24.000</TIMESTAMP>
<PLAYERINFO accountid="112307829" firstname="Simon" lastname="Schork" nickname="SimonSchork" zip="76133" operatorid="275" currency="EUR" language="" country="DE" city="SimonSchork" sex="M" universe="Default"/>
<CHANNEL>I</CHANNEL>
<BALANCE>110.34</BALANCE>
<WONAMOUNT>3.00</WONAMOUNT>
<BONUSWONAMOUNT>0.00</BONUSWONAMOUNT>
<SUBSYSTEMID>3</SUBSYSTEMID>
<CAT1>1</CAT1>
<CAT2>1</CAT2>
<CAT3>30136</CAT3>
<OUTCOME>W</OUTCOME>
<CLIENT>flash</CLIENT>
<BETAMOUNT>1.00</BETAMOUNT>
<BONUSBETAMOUNT>0.00</BONUSBETAMOUNT>
<BASECURRENCY>EUR</BASECURRENCY>
</ROUND>
我创建了这样的模型,LastWinnersModel
@Root(name = "EVENTSTREAM", strict = false)
public class LastWinnersModel {
@Attribute(name = "name", required = false)
private String name;
@Attribute(name = "rc")
private int rc;
@Attribute(name = "id")
private long id;
@ElementList(name = "ROUND", entry = "ROUND", inline = true, required = false)
private List<RoundModel> lastWinners = new ArrayList<>();
圆形模型
@Root(name = "ROUND", strict = false)
public class RoundModel {
@Attribute(name = "id")
private long id;
@Attribute(name = "nyxid")
private long nyxId;
@Element(required = false)
private LastWinnerModel lastWinnerModel;
和 LastWinnerModel
public class LastWinnerModel {
@Attribute(name = "TIMESTAMP")
private String date;
@Attribute(name = "CHANNEL")
private String channel;
@Attribute(name = "BALANCE")
private BigDecimal balance;
@Attribute(name = "WONAMOUNT")
private BigDecimal wonAmonut;
@Attribute(name = "BONUSWONAMOUNT")
private BigDecimal bonusWonAmount;
@Attribute(name = "SUBSYTEMID")
private int subsystemId;
@Attribute(name = "CAT1")
private int cat1;
@Attribute(name = "CAT2")
private int cat2;
@Attribute(name = "CAT3")
private int cat3;
@Attribute(name = "OUTCOME")
private String outcome;
@Attribute(name = "CLIENT")
private String client;
@Attribute(name = "BETAMOUNT")
private BigDecimal betAmount;
@Attribute(name = "BONUSBETAMOUNT")
private BigDecimal bonusBetAmount;
@Attribute(name = "BASECURRENCY")
private String baseCurrency;
@Attribute(name = "PLAYERINFO")
private PlayerInfoModel playerInfo;
在回复中
@Element(required = false)
private LastWinnerModel lastWinnerModel;
尽管我从外部服务收到一些数据,但始终为空。 我想问题是 LastWinnerModel 没有 root 或者我的模型中可能有什么问题? 感谢您的任何答复。
似乎您没有使用 JAXB 进行 XML 绑定,而是使用具有相似(但不相同的注释)的类似框架。 我只能回答 JAXB,但很可能它与您的框架存在相同的问题:
似乎,模型的嵌套并没有反映 XML 中的嵌套。 在 XML 中,TIMESTAMP 标签是 ROUND 标签的直接子代,即正确缩进你的 XML 是这样的:
<EVENTSTREAM...
<ROUND...
<TIMESTAMP...
因此 JAXB 会尝试将 TIMESTAMP 标记映射到 RoundModel 类中的变量。 但是,这样的变量不存在,因此 TIMESTAMP 的 XML 值根本不会映射到您的模型中并丢失(对于 CHANEL、BALANCE... 也是如此)。
您定义的模型将映射到此结构的 XML:
<EVENTSTREAM ...
<ROUND...
<lastWinnerModel...
<TIMESTAMP...
但是,如果您无法更改 XML,那么在 JAXB 中,我不知道通过添加另一个神奇的注释来映射模型的真正简单的方法。 (例如,您可以在 JAXB 中为此使用 XmlAdapter 类。)因此,如果您坚持使用 XML,这将是将 RoundModel 和 LastWinnerModel 合并为一个类的最简单方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.