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

JSON反序列化为Java对象后字段为空的问题排查与解决

反序列化JSON到Java对象时所有字段为null的问题排查与修复

问题根源

  1. JSON结构与目标类不匹配
    服务器返回的JSON外层是包含reports数组的对象,但你直接将整个JSON反序列化为单个ReportDataFromReporter对象。顶层结构完全不对应,Jackson无法找到匹配字段,导致所有字段为null。
  2. 字段名称不匹配
    实体类字段名和JSON中的键名完全错位:
    • 实体day → JSON date
    • 实体hours → JSON hour
    • 实体description → JSON text
    • 实体project → JSON pro
    • 实体taskType → JSON task
  3. 日期格式配置冲突
    你同时配置了JavaTimeModule和SimpleDateFormat,二者逻辑冲突;且JSON中的日期是带时区的格式(2023-03-15T00:00:00+03:00),SimpleDateFormat无法正确解析该格式。

修复步骤

1. 创建顶层响应类匹配JSON结构

定义一个包含reports数组的顶层类,用来接收完整的JSON响应:

@Data
public class ReporterResponse {
    private List<ReportDataFromReporter> reports;
}

2. 修正实体类的字段映射与日期配置

用@JsonProperty指定JSON对应的键名,同时调整日期格式化规则以适配带时区的格式:

@Data
public class ReportDataFromReporter {
    private Long id;
    
    @JsonProperty("date")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX")
    private LocalDate day;
    
    @JsonProperty("hour")
    private Integer hours;
    
    @JsonProperty("text")
    private String description;
    
    @JsonProperty("pro")
    private Long project;
    
    @JsonProperty("task")
    private Long taskType;
    
    private Long work_after;
}

3. 调整反序列化代码逻辑

将反序列化目标改为顶层的ReporterResponse类,再从中取出需要的报表数据:

// 替换原有反序列化代码
ReporterResponse response = objectMapper.readValue(reporterResponse, ReporterResponse.class);
List<ReportDataFromReporter> reportList = response.getReports();
// 根据业务需求返回数据,示例返回列表首个元素(可根据实际修改返回类型为List)
return reportList.isEmpty() ? null : reportList.get(0);

4. 修复ObjectMapper的日期配置

移除冲突的SimpleDateFormat配置,仅保留JavaTimeModule即可正确处理Java 8日期类型:

ObjectMapper objectMapper = new ObjectMapper()
        .registerModule(new JavaTimeModule())
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 删除此行:objectMapper.setDateFormat(dateFormat);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:38:20