当前位置: 首页 > news >正文

Spring Boot 中使用 Jackson 实现全局时间格式处理(支持多格式反序列化)

好的,以下是整理好的 CSDN 博文格式内容,适合你发布为一篇讲解 Jackson 全局时间配置的文章:


Spring Boot 中使用 Jackson 实现全局时间格式处理(支持多格式反序列化)

在实际开发中,我们经常需要处理前后端交互中的时间字段。为了统一时间格式,通常会在字段上添加 @JsonFormat 注解,但如果项目中字段很多,这种方式会显得重复且难以维护。

本文将介绍如何通过配置 Jackson 的全局时间格式,实现对 Date 类型的统一 序列化反序列化,并支持多种时间格式自动识别,无需在每个字段上加注解。


一、目标实现效果

功能是否需要注解是否生效
Date 序列化(Java → JSON)❌ 不需要注解✅ 使用统一格式
Date 反序列化(JSON → Java)❌ 不需要注解✅ 支持多格式
LocalDateTime 支持⚠️ 需要单独配置✅ 可选扩展支持

二、自定义多格式反序列化器

首先,我们创建一个支持多种时间格式的反序列化器 FlexibleDateDeserializer

public class FlexibleDateDeserializer extends JsonDeserializer<Date> {private static final List<String> DATE_FORMATS = Arrays.asList("yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","yyyy/MM/dd HH:mm:ss","yyyy/MM/dd","yyyyMMddHHmmss","yyyyMMdd");@Overridepublic Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {String dateStr = p.getText().trim();if (dateStr.isEmpty()) return null;for (String format : DATE_FORMATS) {try {SimpleDateFormat sdf = new SimpleDateFormat(format);sdf.setLenient(false);return sdf.parse(dateStr);} catch (ParseException ignored) {}}throw new IllegalArgumentException("Unparseable date: \"" + dateStr + "\". Supported formats: " + DATE_FORMATS);}
}

三、全局注册 Jackson 配置

通过 Spring Boot 提供的 Jackson2ObjectMapperBuilderCustomizer,我们可以注册这个反序列化器,并设置全局格式:

@Configuration
public class JacksonConfig {@Beanpublic Jackson2ObjectMapperBuilderCustomizer customDateFormat() {return builder -> {builder.deserializerByType(Date.class, new FlexibleDateDeserializer());builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 统一序列化格式builder.timeZone(TimeZone.getTimeZone("Asia/Shanghai"));};}
}

四、使用效果

无需任何注解,直接使用 Date 类型字段即可:

public class OrderDTO {private Date deliveryTime;
}

示例交互:

✅ 前端传值(反序列化)支持:
  • 2025-06-26
  • 2025-06-26 14:30:00
  • 2025/06/26 14:30:00
  • 20250626143000
✅ 后端返回(序列化)格式统一为:
"deliveryTime": "2025-06-26 14:30:00"

五、关于 LocalDateTime 的支持(可选)

如果你使用的是 LocalDateTime 类型,可以单独添加一个类似的多格式解析器(可参考 这篇扩展实现)。


六、注意事项

  • 全局配置只影响 java.util.Date 类型;
  • LocalDateTimeLocalDate 等 Java 8 时间类需要单独注册反序列化器;
  • 如果某个字段需要特殊格式,可以局部添加 @JsonFormat@JsonDeserialize 注解覆盖默认行为。

七、总结

通过这种方式,我们可以在项目中实现:

  • 全局统一时间格式输出(序列化);
  • 高容错时间格式解析(反序列化);
  • 避免在每个字段上重复添加注解;
  • 提升项目可维护性和开发效率。

如需支持 LocalDateTimeZonedDateTime 等更多类型的多格式解析,可以进一步拓展 JacksonConfig 配置。


📌 觉得有帮助?欢迎点赞 / 收藏 / 关注我,持续分享更多实用 Java & Spring Boot 技巧!

如需源码或有问题交流,欢迎留言讨论~

http://www.lqws.cn/news/529993.html

相关文章:

  • A模块 系统与网络安全 第三门课 网络通信原理
  • Spring AI 入门到实战:我如何用它让系统具备“理解能力”
  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • Pycharm无法运行Vue项目的解决办法
  • Java 泛型详解:从入门到实战
  • jdbc实现跨库分页查询demo
  • 人力资源管理系统
  • Spring Cloud Config动态刷新实战指南
  • 用户统计-01.需求分析和设计
  • GNSS位移监测站在大坝安全中的用处
  • 渗透实战:使用隐式转换覆盖toString的反射型xss
  • Day43 复习日 图像数据集——CNN
  • 【PX4-AutoPilot教程-TIPS】PX4系统命令行控制台ConsolesShells常用命令(持续更新)
  • ES文件管理器v4.4.3(ES文件浏览器)
  • 鸿蒙 FoldSplitContainer 解析:折叠屏布局适配与状态管理
  • MySQL之存储函数与触发器详解
  • 多相机人脸扫描设备如何助力高效打造数字教育孪生体?
  • ethers.js express vue2 定时任务每天凌晨2点监听合约地址数据同步到Mysql整理
  • ASIO 避坑指南:高效、安全与稳健的异步网络编程
  • 微服务架构下面临的安全、合规审计挑战
  • Python打卡:Day37
  • 使用 Python 自动化文件获取:从 FTP 到 API 的全面指南
  • 【Bluedroid】蓝牙启动之 btm_acl_device_down 流程源码解析
  • 稳定币技术全解:从货币锚定机制到区块链金融基础设施
  • Java底层原理:深入理解线程与并发机制
  • GEO生成式引擎优化发展迅猛:热点数智化传播是GEO最佳路径
  • 人大金仓Kingbase数据库KSQL 常用命令指南
  • 【论文】云原生事件驱动架构在智能风控系统中的实践与思考
  • 小孙学变频学习笔记(八)变频器的输入电流(下)
  • RPC(Remote Procedure Call)技术解析