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

Jackson的@JsonIgnoreProperties与FAIL_ON_UNKNOWN_PROPERTIES对非字符串字段失效如何解决

问题根因

你遇到的报错本质上和「未知字段忽略规则」无关,错误信息已经明确是类型不匹配:Jackson反序列化时已经匹配到了目标类中同名字段,但是JSON中该字段是Object结构,目标类中对应字段类型为java.lang.String,类型不匹配才抛出异常。
你之前误以为目标类没有定义该字段,大概率是漏查了目标类继承的父类、实现的接口中定义的companyAddress字段。

修复方案

优先排查类定义

  • 检查反序列化目标类的所有层级(自身、父类、实现的接口)中是否存在companyAddress字段:
    • 如果存在且类型为String,直接删除该字段,或者将字段类型改为Map<String,String>/自定义的地址实体类即可解决报错。
    • 如果该字段是业务需要保留的String类型,可以添加@JsonIgnore注解标注该字段,反序列化时直接忽略。
  • 确认你使用的ObjectMapper实例确实配置了mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);,避免多个实例导致配置不生效的问题。

配置忽略类型不匹配异常

如果确认目标类全层级都没有定义companyAddress字段,还是抛出该异常,可以添加如下配置关闭类型不匹配的失败校验:

全局配置方式

ObjectMapper mapper = new ObjectMapper();
// 原有忽略未知字段配置
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 新增配置:遇到类型不匹配时直接忽略,不抛出异常
mapper.disable(DeserializationFeature.FAIL_ON_MISMATCHED_INPUT_TYPE);
mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);

单类注解配置方式

如果不想全局生效,只需要在目标类上添加如下注解即可:

// ignoreInvalid参数表示忽略类型不匹配的属性
@JsonIgnoreProperties(ignoreUnknown = true, ignoreInvalid = true)
public class YourTargetClass {
    // 类原有业务字段
}

注:ignoreInvalid参数需要Jackson 2.12及以上版本支持,低版本请使用全局配置方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:05