基于响应类型的杰克逊反序列化

时间:2019-10-02 20:00:04

标签: java xml jackson

我正在与一个以XML数据作为响应的RESTful API集成。

我已经采用了XML模式,并生成了相关的Java类以进行序列化/反序列化。

例如,假设我正在呼叫一个提供订单信息的端点。它可以使用两种类型的响应之一进行响应。

成功通话:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="response">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="order">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="purchaseOrderNumber" type="xs:string"/>
                            <xs:element name="warehouse" minOccurs="0" type="xs:string"/>
                            <xs:element name="customerOrderNumber" minOccurs="0" type="xs:string"/>
......

对于失败的呼叫:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="response">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="error">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="code" type="xs:string"/>
                            <xs:element name="message" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我已经使用XJC在Java中生成了两个Response类(一个用于正确的响应,一个用于错误)。

我正在尝试反序列化,但是难以理解正确的方法。我最初的想法是尝试先将反序列化反序列化为成功调用的响应,如果它引发异常,则尝试错误响应。从那里我可以检查哪个基于instanceof,但这似乎很混乱。

0 个答案:

没有答案