Jackson是否支持原生方式阻止枚举类型的Null反序列化?
Jackson JSON反序列化中枚举字段Null值的处理逻辑
默认情况下,Jackson会将JSON中的"myEnum": null直接映射到Java类的枚举字段,最终该字段值为null——因为Java枚举类型本身允许为null,Jackson默认不对这种情况做拦截。
Jackson提供两种原生方式阻止Null被识别为枚举的有效值,无需自行编写复杂验证逻辑:
- 全局配置:通过
ObjectMapper关闭DeserializationFeature.ACCEPT_NULL_FOR_ENUMS特性。示例代码:
配置后,所有枚举字段遇到JSON中的ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.ACCEPT_NULL_FOR_ENUMS);null值时,都会抛出JsonMappingException异常。 - 字段级配置:如果只需针对特定枚举字段生效,可在字段上添加
@JsonSetter(nulls = Nulls.FAIL)注解。示例:
该字段遇到public class MyClass { @JsonSetter(nulls = Nulls.FAIL) private MyEnum myEnum; }null值时会触发异常,其他枚举字段不受影响。
如果不使用上述原生配置,也可以通过自定义枚举反序列化器,在反序列化逻辑中手动检查值是否为null,并抛出异常实现验证。
内容的提问来源于stack exchange,提问作者user856358
相关产品推荐
相关产品推荐

