Я использую внешнюю службу, которая отправляет ответ в следующей структуре
В случае успеха:
{
"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 {
}
Как мы можем десериализовать это без какого-либо взлома чистым способом?
Заранее спасибо.