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

Java中Jackson解析JSON为POJO时Country字段反序列化报错排查

问题原因

你的POJO结构和JSON实际结构不匹配,是映射失败的核心原因:

  • 你贴的JSON里,Country节点本身就是动态键值对结构:键是国家代码(US/CA/AU等),值是对应国家的详情对象,不存在外层包装的countryData属性。
  • 你自定义的Country类是普通JavaBean,Jackson会尝试将Country节点下的属性映射到该类的同名字段,但你的Country类只有countryData字段,JSON中完全不存在这个键,再加上接口部分返回场景下Country字段会返回空数组[](异常信息里的JsonToken.START_ARRAY就对应这个场景),就直接触发了反序列化异常。
修正步骤
  • 直接删除多余的Country包装类,不需要这层嵌套。
  • 修改OfferData类里的Country字段类型,直接用Map<String, CountryData>接收动态键值对结构。

修正后的OfferData代码如下:

@Getter @Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class OfferData {

  @JsonProperty("Offer")
  private Offer offer;

  @JsonProperty("Country")
  private Map<String, CountryData> countryMap;
}
  • 原有的CountryData类结构完全符合JSON里的国家详情结构,不需要改动,直接保留即可。
特殊场景兼容

异常信息提示存在Country值为数组的情况,说明接口返回不规范:空值场景下可能返回[]而不是空对象{}。如果需要兼容这种不规范返回,可以给字段加简单的反序列化容错,比如自定义反序列化器遇到数组类型时直接返回空Map,避免接口偶发返回异常格式导致接口报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:24:11