【问题标题】:Jackson fails to recognize @class type identifier in JSON payloadJackson 无法识别 JSON 有效负载中的 @class 类型标识符
【发布时间】:2019-06-18 11:27:52
【问题描述】:

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

 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 反序列化是透明地发生的;我正在使用 Spring Cloud Stream。

【问题讨论】:

    标签: java jackson json-deserialization


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多