Джексон «InvalidTypeIdException: не удалось разрешить идентификатор типа» при десериализации класса с аннотацией @JsonTypeInfo из файла Avro - PullRequest
0 голосов
/ 14 апреля 2020

Я застрял, пытаясь понять, как jackson-dataformat-avro разрешает идентификаторы типов. Я успешно сериализовал класс и теперь пытаюсь снова десериализовать его с той же схемой. У него есть приватное поле "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 сериализации в другом месте, поэтому я хотел бы сохранить его.

В чем здесь проблема c для Avro?

И, возможно, это также проблематично c, что ключ карты strings не является строкой?

...