Как десериализовать подтип JSON, используя Джексона, с одним случаем отсутствия идентификатора типа - PullRequest
0 голосов
/ 28 июня 2019

Я использую внешнюю службу, которая отправляет ответ в следующей структуре

В случае успеха:

{
  "executionTime": ""
  "result": <subclass of ObjectBase which has type id>
}

В случае сбоя:

{
  "executionTime": ""
  "result": {
     "error": <ErrorResult which is subtype of ObjectBase>
  }
}

В случае сбоя в объекте результата отсутствует идентификатор типа, и десериализация Джексона не удалась.

Я попытался использовать defaultImpl, но в итоге получил эту ошибку

Причина: java.lang.IllegalArgumentException: класс ErrorResponse, а не подтип [простой тип, класс ObjectBase]

    public class Response<T> {

        private APIException error;
        private T result;

        public Response(T result, APIException error) {
            this.error = error;
            this.result = result;
        }
    }

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = ParamKeys.OBJECT_TYPE, defaultImpl = ErrorResponse.class)
    @JsonSubTypes({
            @JsonSubTypes.Type(name = ObjectTypes.VALUE, value = Value.class),
    })
    public class ObjectBase implements Serializable {
    }

Как мы можем десериализовать это без какого-либо взлома чистым способом?

Заранее спасибо.

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