You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson 2.15无法反序列化泛型内List类型的问题求助

Jackson 2.15泛型类内List类型序列化/反序列化问题解决思路

1. 适配Jackson 2.15的类型序列化策略变更

Jackson 2.14到2.15版本中,泛型容器内元素的类型信息生成逻辑有调整。可以显式配置ObjectMapper的默认类型推导规则,确保容器元素的@class属性被序列化:

ObjectMapper mapper = new ObjectMapper();
// 为非final类启用默认类型推导,以PROPERTY形式输出类型信息
mapper.activateDefaultTyping(
    mapper.getPolymorphicTypeValidator(),
    ObjectMapper.DefaultTyping.NON_FINAL,
    JsonTypeInfo.As.PROPERTY
);

2. 显式指定泛型类型引用

序列化/反序列化时,通过TypeReference明确泛型结构,避免Jackson自动推断时丢失类型信息:

  • 序列化时强制指定类型:
String json = mapper.writerFor(new TypeReference<UserMessageResult<List<AnEntity>>>() {})
                    .writeValueAsString(userMessageResult);
  • 反序列化时指定类型:
UserMessageResult<List<AnEntity>> result = mapper.readValue(
    jsonStr,
    new TypeReference<UserMessageResult<List<AnEntity>>>() {}
);

3. 补充@JsonSubTypes明确子类映射

在UserMessageResult的entity字段上添加@JsonSubTypes注解,显式声明可序列化的子类类型,让Jackson明确列表元素的类型:

public class UserMessageResult<T> {
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY)
    @JsonSubTypes({@JsonSubTypes.Type(value = AnEntity.class)})
    private T entity;
    
    // getter/setter
}

4. 升级到Jackson 2.15后续补丁版本

该问题大概率是Jackson 2.15正式版的兼容性bug,后续小版本(如2.15.1、2.15.2)已修复类似泛型容器类型信息丢失问题,直接升级版本可解决。

5. 自定义序列化器兜底

如果以上方法无效,可针对List类型自定义序列化器,强制写入元素的类型信息:

public class TypedListSerializer extends StdSerializer<List<?>> {
    public TypedListSerializer() {
        super(List.class);
    }

    @Override
    public void serialize(List<?> value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartArray();
        for (Object item : value) {
            // 强制按带类型信息的方式序列化每个元素
            provider.findTypedValueSerializer(item.getClass(), true, null)
                  .serialize(item, gen, provider);
        }
        gen.writeEndArray();
    }
}

在UserMessageResult的entity字段上添加注解关联序列化器:

@JsonSerialize(using = TypedListSerializer.class)
private T entity;

内容的提问来源于stack exchange,提问作者BetaRide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:05:03