如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
源码地址(后端):https://gitee.com/csps/mingyue-springcloud-learning
源码地址(前端):https://gitee.com/csps/mingyue-springcloud-ui
文档地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis
Jackson 是一个用于在 Java 中处理 JSON 数据的流行库。它提供了一组工具,用于将 JSON 数据解析成 Java 对象(反序列化)以及将 Java 对象序列化成 JSON 格式。Jackson 在 Java 应用程序中广泛使用,尤其在处理 JSON 数据的 Web 服务和 API 中。
以下是 Jackson 的一些关键功能和组件:
ObjectMapper
类是 Jackson 的核心组件。它允许您将 JSON 数据转换为 Java 对象(反序列化)并将 Java 对象转换为 JSON 数据(序列化)。@JsonProperty
、@JsonIgnore
和 @JsonFormat
。序列化和反序列化是编程中常用的两个概念,它们通常用于将数据从一种格式转换为另一种格式,例如将对象转换为字节流或将数据转换为 JSON 格式。这两个过程在数据存储、数据传输和数据持久化等方面都很重要。
ObjectOutputStream
来将 Java 对象序列化为字节流。在网络通信中,将数据转换为 JSON 或 XML 格式以便传输也是一种序列化。ObjectInputStream
来从字节流反序列化为 Java 对象。在网络通信中,将接收到的 JSON 或 XML 数据还原为程序可用的数据结构也是一种反序列化。序列化和反序列化在许多编程场景中都非常有用,例如:
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatypegroupId>
<artifactId>jackson-datatype-jsr310artifactId>
dependency>
@Slf4j
@AutoConfiguration(before = JacksonAutoConfiguration.class)
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> {
// 全局配置序列化返回 JSON 处理
JavaTimeModule javaTimeModule = new JavaTimeModule();
// Jackson 序列化 Long 类型超出 JS 最大最小值序列化位字符串转为 String,解决后端返回的类型在前端精度丢失的问题
javaTimeModule.addSerializer(Long.class, BigNumberSerializer.INSTANCE);
javaTimeModule.addSerializer(Long.TYPE, BigNumberSerializer.INSTANCE);
javaTimeModule.addSerializer(BigInteger.class, BigNumberSerializer.INSTANCE);
// Jackson 序列化 BigDecimal 类型为 String,解决后端返回的类型在前端精度丢失的问题
javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
// ======================= 时间序列化规则 =======================
// yyyy-MM-dd HH:mm:ss
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMATTER));
// yyyy-MM-dd
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE));
// HH:mm:ss
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME));
// Instant 类型序列化
javaTimeModule.addSerializer(Instant.class, InstantSerializer.INSTANCE);
// ======================= 时间反序列化规则 =======================
// yyyy-MM-dd HH:mm:ss
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMATTER));
// yyyy-MM-dd
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE));
// HH:mm:ss
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME));
// Instant 反序列化
javaTimeModule.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
builder.modules(javaTimeModule);
// 时区配置
builder.timeZone(TimeZone.getDefault());
log.info("初始化 Jackson 配置");
};
}
}
com.csp.mingyue.common.core.config.JacksonConfig
添加前
[
{
"userId": 1,
"createTime": "2023-07-19T17:06:22",
"updateTime": "2023-07-19T17:06:25",
}
]
添加后
[
{
"userId": 1,
"createTime": "2023-07-19 17:06:22",
"updateTime": "2023-07-19 17:06:25",
}
]