jackson 默认遇到 json 中未知字段会抛出 unrecognizedpropertyexception,可通过全局配置 objectmapper 的 fail_on_unknown_properties 为 false 或在类上添加 @jsonignoreproperties(ignoreunknown = true) 注解来忽略,前者适用于统一处理,后者适用于局部控制,且类注解优先级高于全局配置。

Jackson 默认遇到 JSON 中存在 Java 类没有定义的字段时,会直接抛出 UnrecognizedPropertyException。要忽略这些未知字段,核心就是告诉 Jackson “别报错,跳过就行”。主要有两种实用方式,按适用场景选一种即可。
方式一:全局配置 ObjectMapper(推荐用于统一处理)
适用于项目中多数或全部反序列化场景都不关心多余字段的情况。只需在初始化 ObjectMapper 时关闭校验:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 调用
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - 建议放在 Spring Boot 的配置类、工具类静态块或 Bean 初始化处,确保所有地方复用同一配置实例
- 示例代码:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
方式二:类级别注解(推荐用于局部控制)
适用于只对某几个实体类忽略未知字段,其他类仍需严格校验的场景。直接在目标类上加注解:
- 使用
@JsonIgnoreProperties(ignoreUnknown = true)标注类 - 该注解只影响当前类及其子类(若未禁用继承),不影响其他类
- 示例:
@JsonIgnoreProperties(ignoreUnknown = true)
public class User { ... }
补充说明
两种方式不冲突,但优先级是:类注解 > 全局配置。如果某个类同时配置了 ignoreUnknown = false,即使全局设为 false,该类仍会报错。另外注意:
- 仅对反序列化(JSON → 对象)生效;序列化(对象 → JSON)不受影响
- 不会自动填充或记录被忽略的字段,只是静默跳过
- 若字段名大小写不一致(如 JSON 是
userName,Java 是username),还需配合PropertyNamingStrategies或@JsonProperty显式映射
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










