首页 > 解决方案 > 使用 Avro 文件中的 @JsonTypeInfo 注释反序列化类时杰克逊“InvalidTypeIdException:无法解析类型 ID”

问题描述

我一直试图了解如何jackson-dataformat-avro解析类型 ID。我已经成功地序列化了一个类,现在尝试使用相同的模式再次反序列化它。它有一个"name"类型为私有的字段LocalizedString。但我得到以下异常:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'org.example.LocalizedString' as a subtype of [simple type, class org.example.LocalizedString]: known type ids = [LocalizedString] (for POJO property 'name')

该类LocalizedString如下所示:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, property="type")
@Value
public class LocalizedString {

    private Map<Language, String> strings;

    ...
} 

在 Avro 模式文件中,我输入了name如下字段:

{
  "name": "name",
  "type": {
    "type": "record",
    "namespace": "org.example",
    "name": "LocalizedString",
    "fields": [
      {
        "name": "type",
        "type": "string"
      },
      {
        "name": "strings",
        "type": ["null", {
          "type": "map",
          "values": "string"
        }]
      }
    ]
  }
}

如果我省略@JsonTypeInfo注释,那么它可以工作。但是,我将它用于其他地方的 Json 序列化,所以我很想保留它。

Avro 的具体问题是什么?

strings而且地图的键不是字符串可能也是有问题的?

标签: javajacksonavro

解决方案


推荐阅读