Jackson 序列化核心是 ObjectMapper,支持注解控制字段、自定义序列化器及健壮性配置:创建单例实例后调用 writeValueAsString() 即可转换 POJO 为 JSON;@JsonProperty 重命名、@JsonIgnore 忽略字段、@JsonInclude 控制 null 输出;需注册 JavaTimeModule 支持 LocalDateTime。

Jackson 是 Java 中实现 JSON 序列化的主流方案,它把对象转成标准 JSON 字符串的过程叫“序列化”,核心靠 ObjectMapper 配合注解与配置完成,不是 Java 原生的 Serializable 接口那一套。
用 ObjectMapper 执行基础序列化
这是最常用、最直接的方式:
- 创建 ObjectMapper 实例:它是 Jackson 的核心调度器,线程安全,建议全局单例复用
- 调用 writeValueAsString():传入任意 POJO 对象,返回格式良好的 JSON 字符串
- 自动处理常见类型:String、Number、List、Map、Date(默认按毫秒时间戳)、嵌套对象等都能识别并转换
示例:
User user = new User("李四", 28);String json = objectMapper.writeValueAsString(user);
// 输出:{"name":"李四","age":28}
用注解控制字段级行为
不改代码逻辑,只加注解就能调整 JSON 输出结构:
立即学习“Java免费学习笔记(深入)”;
-
@JsonProperty("user_name"):重命名字段,比如把
name输出为user_name - @JsonIgnore:跳过某个字段,不参与序列化(如密码、敏感信息)
- @JsonInclude(JsonInclude.Include.NON_NULL):全局或类级别设置,让 null 字段不输出
- @JsonFormat(pattern = "yyyy-MM-dd"):对 Date 或 LocalDateTime 字段指定日期格式
自定义序列化逻辑(进阶场景)
当默认规则无法满足业务需求时,比如要拼接字段、做脱敏、转枚举描述、或统一加前缀,可写定制序列化器:
- 定义一个类继承
StdSerializer<YourType> - 重写
serialize()方法,用JsonGenerator手动写出 JSON 结构 - 在目标类上加
@JsonSerialize(using = YourCustomSerializer.class)
例如:用户手机号显示为 138****1234,就在序列化器里截取并替换中间四位。
配置 ObjectMapper 提升健壮性
避免运行时报错或结果不符合预期,关键配置不能少:
-
启用/禁用特性:如
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)允许 JSON 多字段不报错 -
注册 Java 8 时间模块:
objectMapper.registerModule(new JavaTimeModule()),否则 LocalDateTime 会报错 - 设置默认时区和日期格式:避免时间值偏移或格式混乱
-
设置字符编码:尤其在写入文件或响应流时,加上
objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_EMPTY)可减少冗余


















