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 的使用,能有效解决前后端数据交互中的格式转换问题。

相关推荐
考虑考虑4 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯5 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路9 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
Java陈序员11 小时前
企业级!一个基于 Java 开发的开源 AI 应用开发平台!
spring boot·agent·mcp
像我这样帅的人丶你还12 小时前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev14 小时前
GreenDAO → Room
android·java·kotlin
杨运交19 小时前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
亦暖筑序19 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏19 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev21 小时前
ButterKnife → ViewBinding
android·java·kotlin