Java jackson如何派生“中反序列化的类型?”;无法解析类型id';foo';转化为子类型

Java jackson如何派生“中反序列化的类型?”;无法解析类型id';foo';转化为子类型,java,spring,serialization,redis,jackson,Java,Spring,Serialization,Redis,Jackson,我正在尝试用jackson序列化/反序列化一组对象,包括子类。我正在使用JsonTypeInfo和JsonSubTypes注释。使用DynamoDB可以很好地工作,但我也尝试使用Redis(通过spring的Redis组件)进行缓存。它可以很好地写入redis,但在尝试从redis检索时出现以下错误: 无法将类型id“LinkedTreeMap”解析为[simple type,myBaseClass]:已知类型id=[myBaseClass,sub-class1,sub-class1…]的子类型

我正在尝试用jackson序列化/反序列化一组对象,包括子类。我正在使用JsonTypeInfo和JsonSubTypes注释。使用DynamoDB可以很好地工作,但我也尝试使用Redis(通过spring的Redis组件)进行缓存。它可以很好地写入redis,但在尝试从redis检索时出现以下错误:

无法将类型id“LinkedTreeMap”解析为[simple type,myBaseClass]:已知类型id=[myBaseClass,sub-class1,sub-class1…]的子类型 ... 通过引用链…->[MyBaseClass集合]->java.util.ArrayList[0]

我想LinkedTreeMap在gson图书馆里。我们有一个相当大的maven项目,由于其他库依赖性,gson也在其中,但我不知道它是如何或为什么被引入到这个使用中的。看起来它是基于json的结构派生这个类的。它试图反序列化的Json看起来像是一个列表而不是一个映射

那么这个LinkedTreeMap是从哪里来的呢

我们还使用以下ObjectMapper for redis:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS);
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss.SSSZ"));
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
objectMapper.registerModule(new JodaModule());

我们还使用了一个自定义序列化程序,它实现了重新序列化程序。您可能认为这可能是查找此类问题的第一个地方,但它非常简单,并且在使用Spring@Bean自动连接RedisTemplate时似乎是必要的。

您可以给出您尝试使用的类的示例,以及如何反序列化它们吗。您是否创建了一个复制此行为的测试?经过更多测试后,它看起来可能与JsonTypeInfo和JsonSubTypes注释有关,因为这实际上是一个序列化问题;LinkedTreeMap将作为属性的值写入redis,我使用该属性来确定使用哪个子类。您可以给出尝试使用的类的示例,以及如何反序列化它们。您是否创建了一个复制此行为的测试?经过更多测试后,它看起来可能与JsonTypeInfo和JsonSubTypes注释有关,因为这实际上是一个序列化问题;LinkedTreeMap作为我用来确定要使用哪个子类的属性的值写入redis