springboot jackson json入门与实战

Spring Boot3 Jackson 项目地址

https://gitee.com/supervol/loong-springboot-study

(记得给个start,感谢)

Jackson 介绍

在 Spring Boot 3 中,Jackson 是默认的 JSON 处理库,负责将 Java 对象与 JSON 数据之间进行序列化(Java 对象→JSON)和反序列化(JSON→Java 对象)。它是 Spring Boot Web 模块(包括 Spring MVC 和 Spring WebFlux)的核心依赖,无需额外配置即可自动工作,极大简化了前后端数据交互。

Jackson 核心

Jackson 由多个模块组成,Spring Boot 3 默认引入的核心模块包括:

  • jackson-core:基础核心包,提供 JSON 解析和生成的底层 API。
  • jackson-databind:基于 core 模块的高层 API,提供对象与 JSON 的绑定(序列化 / 反序列化)功能,是开发中最常用的模块。
  • jackson-annotations:提供注解支持,用于控制序列化 / 反序列化行为(如字段别名、忽略字段等)。

Jackson 配置

Spring Boot 3 通过spring-boot-starter-json starter 自动引入 Jackson 依赖,并完成默认配置:

  1. 自动注册MappingJackson2HttpMessageConverter,作为 Spring MVC/WebFlux 中处理 JSON 的消息转换器。
  2. 自动配置ObjectMapper(Jackson 的核心工具类),用于执行对象与 JSON 的转换。
  3. 默认支持 Java 8 + 的新特性(如LocalDateLocalDateTime等日期时间类型)。

Jackson 注解

通过注解可以灵活控制序列化 / 反序列化规则,常用注解包括:

注解 作用 示例
@JsonProperty 指定 JSON 字段名(解决命名不一致问题) @JsonProperty("user_name") String name;
@JsonIgnore 忽略某个字段(不参与序列化 / 反序列化) @JsonIgnore String password;
@JsonFormat 格式化日期 / 数字等类型 @JsonFormat(pattern = "yyyy-MM-dd") LocalDate birthday;
@JsonInclude 控制字段包含策略(如非空才序列化) @JsonInclude(JsonInclude.Include.NON_NULL) class User
@JsonSerialize 自定义序列化器(处理复杂类型) @JsonSerialize(using = CustomSerializer.class) String field;
@JsonDeserialize 自定义反序列化器 @JsonDeserialize(using = CustomDeserializer.class) String field;

Jackson 自定义

Spring Boot 3 的默认配置满足大部分场景,如需自定义,可通过以下方式:

1. 通过配置文件
java 复制代码
spring:
  jackson:
    time-zone: Asia/Shanghai
    date-format: yyyy-MM-dd HH:mm:ss
    default-property-inclusion: always
2. 自定义ObjectMapper

通过@Bean定义自定义ObjectMapper,覆盖默认配置:

java 复制代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    /**
     * 新手慎用!!!
     * 自定义 ObjectMapper 会覆盖原有 ObjectMapper对象
     *
     * @return ObjectMapper 对象
     */
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 注册Java 8日期时间模块(处理LocalDate等)
        objectMapper.registerModule(new JavaTimeModule());
        // 序列化时忽略null字段
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 允许单引号(默认只支持双引号)
        objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
        return objectMapper;
    }
}

Jackson 示例

请参考项目地址中 springboot-json/springboot-jackson 模块代码。

Jackson 特性

  • Java 17 支持 :适配 Java 17 的新特性(如密封类sealed class),序列化 / 反序列化更稳定。
  • 性能优化:依赖的 Jackson 版本升级(通常为 2.14+),带来解析性能提升和更多功能(如对 JSON Schema 的支持)。
  • 默认模块增强 :对JavaTimeModule的默认支持更完善,无需手动注册即可处理LocalDateTime等类型。

总结

Jackson 是 Spring Boot 3 中处理 JSON 的核心工具,通过自动配置简化了开发流程,同时提供丰富的注解和自定义方式满足复杂需求。掌握 Jackson 的使用,能有效解决前后端数据交互中的格式转换问题。

相关推荐
凡人叶枫13 分钟前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
杨运交17 分钟前
[030][Web模块]Spring Boot 验证与 OpenAPI 集成实战:从校验规则到文档生成
前端·spring boot·python
极客先躯19 分钟前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
NE_STOP35 分钟前
Raft算法处理细节
java
努力攻坚操作系统38 分钟前
编程语言编译运行机制对比:C / Java / Python
java·c语言·python
慧一居士41 分钟前
对比两个文件内容是否完全一致,java实现示例
java
再写一行代码就下班1 小时前
Cursor配置Java环境、创建Spring Boot项目的步骤
java·开发语言·spring boot
摇滚侠1 小时前
Java 零基础全套教程,类的加载过程与类加载器的理解,笔记 189
java·后端·intellij-idea
kong@react1 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
未若君雅裁1 小时前
JVM 运行时数据区:程序计数器、堆、虚拟机栈与栈帧
java·jvm