如何在没有类型ID的情况下使用Jackson来反序列化JSON子类型

时间:2019-06-27 21:56:56

标签: java jackson

我正在使用外部服务,该服务以以下结构发送响应

如果成功:

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

如果失败:

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

如果失败,则结果对象中不直接存在类型id,并且Jackson反序列化失败。

我尝试使用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 {
    }

在没有任何黑客手段的情况下,我们如何反序列化呢?

谢谢。

0 个答案:

没有答案