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 依赖,并完成默认配置:
- 自动注册
MappingJackson2HttpMessageConverter
,作为 Spring MVC/WebFlux 中处理 JSON 的消息转换器。 - 自动配置
ObjectMapper
(Jackson 的核心工具类),用于执行对象与 JSON 的转换。 - 默认支持 Java 8 + 的新特性(如
LocalDate
、LocalDateTime
等日期时间类型)。
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 的使用,能有效解决前后端数据交互中的格式转换问题。