Джексон десериализовать на основе типа ответа - PullRequest
0 голосов
/ 02 октября 2019

Я интегрируюсь с RESTful API, который отвечает данными XML.

Я взял схемы 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>

И я сгенерировал два класса Ответовв Java используется XJC (один для правильного ответа и один для ошибки).

Я пытаюсь десериализовать, но у меня возникают проблемы с пониманием правильного подхода. Сначала я попытался попытаться сначала десериализовать ответ в успешном вызове, если он выдает исключение, а затем попытаться ответить ошибкой. Оттуда я могу проверить, что именно на основе instanceof, но это кажется грязным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...