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



我有一个Java POJOS的层次结构,基类是抽象的。为了确保杰克逊可以从 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 找不到它。知道发生了什么吗?请注意,杰克逊反序列化是透明进行的;我正在使用春云流。

终于想通了。事实证明,由于生产者应用程序发送消息有效负载的方式,Jackson 实际上将其解释为 JSON 字符串值而不是 JSON 对象。通过剥离外部引号并取消转义,杰克逊正确地解析了字符串。

最新更新