jackson json序列化核心是配好依赖、复用objectmapper、按需配置注解或模块:依赖只引jackson-databind,objectmapper须单例复用并预设配置,字段映射通过全局策略或@jsonproperty明确,时间类型需注册javatimemodule,空值处理需显式设置。

用 Jackson 做 JSON 序列化,核心就三点:配好依赖、复用 ObjectMapper、按需配置注解或模块。不写死实例,不忽略字段规则,转换才又快又稳。
依赖配置要精简准确
只引入 jackson-databind 即可,它已自带 core 和 annotations:
- Maven 中声明依赖时指定稳定版本(如 2.15.2+),避免混用不同小版本导致行为不一致
- 不要单独再加 jackson-core 或 jackson-annotations —— 冗余依赖可能引发类加载冲突
- 确保项目中无旧版 Jackson(如 2.9.x 以下)残留,否则 ObjectMapper 默认行为可能差异明显
ObjectMapper 必须单例复用
每次 new ObjectMapper() 都会重建解析器工厂、缓存和配置,开销大且线程不安全:
- 全局声明为 static final 实例,或通过 Spring 管理为 singleton bean
- 首次初始化后,可预设常用配置(如日期格式、空值处理),后续直接调用 writeValueAsString() 即可
- 若需差异化配置(如某个接口要输出 null 字段,其余不要),用 copy() 创建轻量副本,而非新建实例
字段映射要明确可控
Java 属性名和 JSON 字段名不一致?Jackson 不会自动驼峰转下划线,得靠配置或注解:
- 统一策略:用 ObjectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) 全局适配下划线命名
- 个别调整:在字段上加 @JsonProperty("user_name"),配合 public setter 或带 @JsonCreator 的构造器
- 忽略干扰字段:用 @JsonIgnore 忽略循环引用字段,或 @JsonIgnoreProperties(ignoreUnknown = true) 容忍额外字段
时间与空值处理不能靠默认
LocalDateTime、null 字段等,默认序列化结果常不符合预期:
- 时间类型必须注册 JavaTimeModule:
objectMapper.registerModule(new JavaTimeModule()),否则抛异常 - 需要格式化时,用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 注解字段,或全局 setDateFormat()
- 空字段默认不输出,如需保留,调用 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











