Я застрял, пытаясь понять, как 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
не является строкой?