如何让Jackson在遇到未知字段时抛出异常?
如何让Jackson遇到未知JSON字段时抛出异常
当然可以实现这个需求!Jackson确实自带了对应的配置项,能帮你在检测到未知字段时直接抛出异常,正好解决你提到的手动编写大型JSON时校验格式的痛点。
核心配置方法
Jackson默认会忽略未知字段,但你只需要开启DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES这个特性就能改变行为:
1. 直接配置ObjectMapper
如果你是手动创建ObjectMapper实例,只需要添加一行配置:
ObjectMapper objectMapper = new ObjectMapper(); // 开启未知字段时抛出异常 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
这样当JSON中存在实体类没有定义的字段时,Jackson会抛出UnrecognizedPropertyException异常,明确告诉你哪个字段是未知的。
2. Spring Boot项目全局配置
如果是Spring Boot项目,你可以直接在配置文件中设置,不需要手动修改ObjectMapper:
- 在
application.properties中:
spring.jackson.deserialization.fail-on-unknown-properties=true
- 在
application.yml中:
spring: jackson: deserialization: fail-on-unknown-properties: true
针对单个类的特殊配置
如果全局开启了未知字段检测,但某个特定类需要忽略未知字段,可以用@JsonIgnoreProperties注解覆盖全局配置:
@JsonIgnoreProperties(ignoreUnknown = false) // 这个类会遵循全局的异常抛出规则 // 或者如果想单独忽略:@JsonIgnoreProperties(ignoreUnknown = true) public class MyCustomEntity { // 类字段定义... }
关于你提到的Jackson内部机制
你说得很对,Jackson默认采用的是类似SAX的事件驱动流式处理,只关注与实体类属性匹配的JSON事件,这样做确实能最大化性能,避免不必要的字段解析。但当开启FAIL_ON_UNKNOWN_PROPERTIES后,它会额外对每个JSON字段做校验,一旦发现没有对应的实体属性就抛出异常——这在手动编写大型JSON时特别有用,能快速定位拼写错误、多余字段这类问题,避免因为小错误导致数据解析异常却找不到原因。
内容的提问来源于stack exchange,提问作者Leonardo Kenji Shikida
相关产品推荐
相关产品推荐

