如何使用@JacksonXmlProperty反序列化同一对象的不同命名集合?

时间:2017-10-24 19:23:03

标签: java xml-deserialization jackson-dataformat-xml

我们正在尝试将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集合中的退款属性都是null。

有没有办法在不创建退款POJO的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

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

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

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

这样工作得很好。顺便提一下,如果您使用简单的退款类,它只会扩展付款,它也会起作用。如果你真的想要一个不同的类。

public class Refund extends Payment {
}