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

使用Jackson将复杂JSON反序列化为Java List<Tester>问题咨询

Jackson反序列化为指定泛型List的解决方案

问题根因

直接传入List.class作为反序列化目标类型时,受Java泛型擦除机制影响,Jackson无法识别List容器内的元素类型为Tester,会默认将JSON对象反序列化为LinkedHashMap实例,这就是你遇到类型不符合的核心原因。

具体修改步骤

1. 用TypeReference指定完整泛型类型

修改getCollection方法中的readValue调用,通过TypeReference传递完整的泛型类型信息,让Jackson能够正确识别元素类型为Tester:

// 首先引入TypeReference依赖
import com.fasterxml.jackson.core.type.TypeReference;

public static List<Tester> getCollection() throws IOException {  
  ObjectMapper mapper = new ObjectMapper();
  
  // 仅保留findAndRegisterModules即可,已内置JavaTimeModule自动注册逻辑
  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false)
    .findAndRegisterModules();
  
  // 替换原有反序列化逻辑,指定泛型类型
  List<Tester> tester = mapper.readValue(Paths.get("Tester.json").toFile(), new TypeReference<List<Tester>>() {});
  return tester;
}

2. 补充字段映射注解

你的Tester类字段名和JSON中的键名不一致,需要通过@JsonProperty注解指定映射关系,否则字段会反序列化失败为null:

class Tester {
    // 映射JSON中的entete键
    @JsonProperty("entete")
    private entete header =  entete.getHeader();
    // 映射JSON中的pied-depage键
    @JsonProperty("pied-depage")
    private pied-depage footer = pied-depage.getFooter(); 
    private List<Elt> Corps;
    private Elt anlagengut;
    private String nomain;
    // 映射JSON中大小写不一致的daterRange键
    @JsonProperty("daterRange")
    private LocalDateRange dateRange;
    private Map<String,Object> labels; // 缺失的labels字段需补充定义
    
    public LocalDate getDate1() {
      return this.dateRange.getStart();
    }
    
    public LocalDate getDate2() {
      return this.dateRange.getEndInclusive();
    }
    // 确保所有字段都有对应getter、setter方法
}

3. 自定义类适配要求

所有涉及到的自定义类(entete、pied-depage、Elt、garantie、LocalDateRange等)都需要满足以下要求,否则会反序列化失败:

  • 存在公共的无参构造方法
  • 所有需要序列化/反序列化的字段都有对应的getter、setter方法,或字段上标注@JsonProperty注解
  • 类属性的嵌套结构与JSON结构完全匹配

4. 保证JSON格式合法性

你提供的示例JSON存在语法错误(键值对缺值、逗号缺失、括号不匹配等),实际用于反序列化的JSON需要保证语法合法,建议直接用当前程序Jackson序列化生成的JSON做反序列化测试,避免格式问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:10