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

如何为List<? extends Pojo>类型获取Jackson的TypeReference?

动态类型列表反序列化解决方案

核心结论

你无法直接使用已知类场景下的TypeReference写法完成需求:TypeReference依赖编译期确定的泛型参数,你持有的Class<? extends Pojo>是运行期动态传入的类型,无法作为编译期常量写入TypeReference的泛型声明中。

你可以用Jackson内置的TypeFactory动态构造目标集合类型,直接传入readValue方法完成反序列化,示例如下:

// 你持有的动态目标类与JSON字符串
Class<? extends Pojo> targetClazz = ...;
String json = ...;

// 构造List<targetClazz>对应的类型
CollectionType listType = getObjectMapper().getTypeFactory()
        .constructCollectionType(List.class, targetClazz);

// 反序列化直接得到对应类型的列表
List<? extends Pojo> result = getObjectMapper().readValue(json, listType);

扩展说明

  • 该方法支持所有集合类型:如果需要反序列化为Set,只需将constructCollectionType的第一个参数替换为Set.class即可
  • 如需构造更复杂的泛型类型(比如Map<String, ? extends Pojo>),可使用constructParametricType方法:
    JavaType mapType = getObjectMapper().getTypeFactory()
            .constructParametricType(Map.class, String.class, targetClazz);
    Map<String, ? extends Pojo> mapResult = getObjectMapper().readValue(json, mapType);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:39:03