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

解决宇道项目关于接收日期格式yyyy-MM-dd HH:mm:ss后端自动转为1970-01-01 00:00:00的问题

解决宇道项目关于接收日期格式yyyy-MM-dd HH:mm:ss后端自动转为1970-01-01 00:00:00的问题

    • 问题描述
    • 问题原因
    • 解决方案
    • 验证

问题描述

使用芋道项目在开发过程中发现新增语句中、查询语句自定义的日期,前端传输的格式为yyyy-MM-dd HH:mm:ss、后端接收到的数据为1970-01-01 00:00:00

问题原因

Spring Boot 默认使用 Jackson 进行反序列化,而 LocalDateTime 默认格式为 ISO_LOCAL_DATE_TIME(例如:2025-07-23T17:31:46)。而前端传的是 “yyyy-MM-dd HH:mm:ss”,不符合格式,所以 Jackson 无法解析,最后转成了默认值(即 1970-01-01T00:00:00)。

解决方案

在全局配置中通过配置支持字符串和时间戳双格式保留时间戳的兼容性,又支持前端传字符串(格式为 yyyy-MM-dd HH:mm:ss),参考 Spring 官方推荐的写法,自定义的兼容反序列化器,手动判断是字符串还是数字,具体示例代码如下:

@AutoConfiguration
@Slf4j
public class RtJacksonAutoConfiguration {@Bean@SuppressWarnings("InstantiationOfUtilityClass")public JsonUtils jsonUtils(List<ObjectMapper> objectMappers) {// 1.1 创建 SimpleModule 对象SimpleModule simpleModule = new SimpleModule();simpleModule// 新增 Long 类型序列化规则,数值超过 2^53-1,在 JS 会出现精度丢失问题,因此 Long 自动序列化为字符串类型.addSerializer(Long.class, NumberSerializer.INSTANCE).addSerializer(Long.TYPE, NumberSerializer.INSTANCE).addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE).addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE).addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE).addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)// 兼容时间规则.addDeserializer(LocalDateTime.class, new CompatibleLocalDateTimeDeserializer()).addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));// 新增 LocalDateTime 序列化、反序列化规则,使用 Long 时间戳
//                .addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE)
//                .addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE);// 1.2 注册到 objectMapperobjectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));// 2. 设置 objectMapper 到 JsonUtilsJsonUtils.init(CollUtil.getFirst(objectMappers));log.info("[init][初始化 JsonUtils 成功]");return new JsonUtils();}
public class CompatibleLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");private static final ZoneId DEFAULT_ZONE_ID = ZoneId.of("Asia/Shanghai");@Overridepublic LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {if (p.currentToken().isNumeric()) {// 时间戳(毫秒)long timestamp = p.getLongValue();return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), DEFAULT_ZONE_ID);} else {// 字符串时间String str = p.getText().trim();if (str.isEmpty()) return null;return LocalDateTime.parse(str, DEFAULT_FORMATTER);}}
}

验证

致此完美解决
到此完美解决该问题

http://www.dtcms.com/a/307447.html

相关文章:

  • 思途JSP学习 0731
  • 红黑树×协程×内存序:2025 C++后端核心三体问题攻防手册
  • LeetCode Hot 100:42. 接雨水
  • MCU中的RTC(Real-Time Clock,实时时钟)是什么?
  • 聊聊接口测试依赖第三方数据测试策略
  • mysql主从搭建(docker)
  • Verilog与SytemVerilog差别
  • 【爬虫实战】使用Python和JS逆向基于webpack的游戏平台
  • vue 中 props 直接解构的话会数据丢失响应式
  • 在 CentOS 7 安装中文字体
  • 法国声学智慧 ,音响品牌SK (SINGKING AUDIO) 重构专业音频边界
  • vue+ts 基础面试题 (二)
  • 正向运动学(Forward Kinematics,简称FK)和逆向运动学(Inverse Kinematics,简称IK)
  • Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
  • 分类-鸢尾花分类
  • 佳维视工业显示器在除尘与过滤设备中的应用
  • 7800系列三端固定式线性稳压器的典型应用电路
  • MakeInstaller: 一款麒麟操作系统安装包制作工具
  • 进阶向:YOLOv11模型轻量化
  • TGD第九篇:三维应用——视频边缘检测
  • 爱普生002墨水与004墨水基本参数及支持机型
  • 【10】大恒相机SDK C++开发 ——对相机采集的原图像数据IFrameData裁剪ROI 实时显示在pictureBox中,3种方法实现(效率不同)
  • 零基础构建MCP服务器:TypeScript/Python双语言实战指南
  • 某讯视频风控参数逆向分析
  • 《C#与.NET Core跨平台开发的融合架构与实践逻辑》
  • 基于STM32的智能温控通风系统设计
  • Web 开发 08
  • 前端核心技术Node.js(四)——express框架
  • 【JavaEE】(7) 网络原理 TCP/IP 协议
  • 前端下载的EXCEL文件无法打开的解决办法