杰克逊无法识别JSON有效负载中的@class类型标识符

时间:2019-06-18 11:27:52

标签: java jackson json-deserialization

我有一个Java POJOS层次结构,基类是抽象的。为了确保Jackson可以从JSON反序列化为正确的具体类型,我在基类上标注了@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)。但是,当杰克逊尝试反序列化时,我收到以下错误:

 com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class com.foo.MyAbstractClass]: missing type id property '@class'
 at [Source: (byte[])""{\"id\":10,\"params\":[\"foo\",\"bar\"],\"@class\":\"com.foo.MyConcreteClass\"}""; line: 1, column: 1]

类型标识符字段@class在JSON有效负载中,但是Jackson找不到它。知道发生了什么吗?请注意,杰克逊反序列化是透明发生的;我正在使用Spring Cloud Stream。

1 个答案:

答案 0 :(得分:0)

最后弄清楚了。事实证明,由于生产者应用程序如何发送消息有效负载,因此Jackson实际上将消息有效负载解释为JSON String值,而不是JSON对象。通过去除外部引号并将其转义,Jackson随后正确地解析了字符串。