1

我们正在尝试将反序列化 XML 转换为 JSON。在大多数情况下,它工作正常。我们用@JacksonXmlProperty 注释了我们的POJO。但是我们有一个导致问题的新场景。问题是使用相同对象的 2 个不同集合,但名称不同。

这是一个简化的 XML 输入:

<Invoice>
    <Payments>
        <Payment>
            <Amount>
        </Payment>
    </Payments>
    <Refunds>
        <Refund>
            <Amount>
        </Refund>
    </Refunds>
</Invoice>

对应的 POJO 如下所示:

public class Invoice {
    @JacksonXmlElementWrapper(localName = "Payments")
    protected List<Payment> payments;

    @JacksonXmlProperty(localName = "Refunds")
    protected List<Payment> refunds;
}

它无一例外地反序列化,但 Refunds 集合中的退款属性全部为空。

有没有办法在不创建退款 POJO 的情况下做到这一点?

4

1 回答 1

0

问题实际上在于 JacksonXML 注释,而不是在不同集合中使用相同的对象。Refunds 也是一个集合,所以它也应该有 @JacksonXMLElementWrapper ,如下所示:

public class Invoice {
    @JacksonXmlElementWrapper(localName = "Payments")
    protected List<Payment> payments;

    @JacksonXmlElementWrapper(localName = "Refunds")
    protected List<Payment> refunds;
}

它像这样工作得很好。顺便说一句,如果您使用一个简单的 Refund 类,它只是扩展了 Payment,它也可以工作。如果你真的想要一个不同的班级。

public class Refund extends Payment {
}
于 2017-10-26T16:04:28.790 回答