1. 为什么需要关注Jackson的序列化配置?
第一次用Jackson处理JSON数据时,我踩过一个典型的坑:前端传过来的日期字符串"2023-05-20"死活解析不了。调试半天才发现,默认配置下Jackson期望的是时间戳格式。这个经历让我意识到,掌握SerializationFeature和DeserializationFeature这两个配置枚举类,就像拿到了处理JSON数据的万能钥匙。
在实际项目中,JSON数据格式千变万化。你可能需要:
- 让空字符串自动转为null
- 允许API响应中省略null字段
- 处理前端传来的各种非标准日期格式
- 兼容新旧接口的字段差异
这些场景都需要通过配置ObjectMapper的特性来实现。以日期问题为例,只需要这样配置:
java复制ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 反序列化黑魔法:DeserializationFeature详解
2.1 应对数据兼容性问题
上周对接第三方API时,他们返回的JSON里突然多出几个未定义的字段,导致我们的服务直接崩溃。后来发现只需要一个配置就能解决:
java复制mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
这些特性特别实用:
- ACCEPT_SINGLE_VALUE_AS_ARRAY:把单个值自动包装成数组。比如接口约定返回数组,但实际只有一个元素时
- UNWRAP_SINGLE_VALUE_ARRAYS:反过来把单元素数组解包成值
- ACCEPT_EMPTY_STRING_AS_NULL_OBJECT:老系统经常用空字符串表示null
2.2 数据校验与安全防护
有些场景需要严格校验:
java复制// 确保必填字段不为null
mapper.enable(Deseriali
