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

Java Jackson反序列化同字段多类型(对象/数组)报错如何解决

方案1:字段级配置空数组转Null(推荐,无需全局改动)

Jackson 2.9及以上版本支持直接在目标字段加@JsonFormat注解,指定空数组自动转为Null,完全匹配你的场景:

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
class Structure {
    private String code;
    // 新增这一行注解即可
    @JsonFormat(with = JsonFormat.Feature.ACCEPT_EMPTY_ARRAY_AS_NULL)
    private Sth structure;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
class Sth{
    private String sth;
}

加完注解后,当接口返回Error、structure是空数组时,反序列化后Structure类的structure字段会自动设为Null;返回Success时则正常解析为Sth对象,完全不需要修改其他逻辑。

方案2:全局配置(适用于Jackson低版本/多处有同类场景)

如果你的Jackson版本低于2.9,或者项目中有多处类似的字段类型不兼容场景,可以直接给ObjectMapper开启全局配置:

ObjectMapper mapper = new ObjectMapper();
// 全局开启:空数组对应对象类型时自动转为Null
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);

注意这个配置会对所有反序列化操作生效,如果仅需要处理structure这一个字段,优先用方案1即可。

可选方案:自定义反序列化器(需特殊处理时使用)

如果需要空数组返回时structure字段是初始化的空Sth对象而非Null,可以自定义Sth类型的反序列化器单独处理逻辑,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:06:02