Spring Boot 解析 LocalDateTime 失败?Uniapp 传输时间变 1970 的原因与解决方案

目录

  • 前言
  • 1. 问题分析
  • 2. 时间戳(推荐,可尝试)
  • 3. 使用 @JsonDeserialize & @JsonSerialize(中立)
  • 4. 前端传 ISO-8601 格式(不推荐,可尝试)
  • 5. 用 String(中立)

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

最初的数据格式如下:
在这里插入图片描述

具体逻辑是通过前端展示给用户看,后续将其数值带到后端,进行添加,最后以LocalDateTime格式
但发现数据一直都是1970:

在这里插入图片描述

1. 问题分析

在 Uniapp 前端传输 yyyy-MM-dd HH:mm:ss 格式的时间到 Spring Boot 后端时,默认 LocalDateTime 解析失败,导致变成 1970-01-01 08:00:00

1️⃣ 问题分析:为什么时间变成 1970?

📌 1.1 Uniapp 传输的时间

前端 dayjs 处理时间:inGatTime: dayjs(this.itemData.inGatTime).format('YYYY-MM-DD HH:mm:ss'),

传输到后端的 JSON:

{"inGatTime": "2025-03-09 19:10:05"
}

这是一个 字符串,而不是 LocalDateTime!

📌 1.2 Spring Boot 默认的 LocalDateTime 解析
如果后端 LocalDateTime 仅仅加了 @JsonFormat 和 @DateTimeFormat:

@Schema(description = "时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime inGatTime;

问题:

  • @JsonFormat 仅用于序列化(返回数据给前端),不会影响 反序列化(接收前端传输的数据)
  • @DateTimeFormat 只对 Spring MVC 的 URL 参数解析 有效,对 @RequestBody 传输的 JSON 无效

结果是,Spring Boot 无法正确解析 yyyy-MM-dd HH:mm:ss,导致 LocalDateTime 变成 1970-01-01 08:00:00(默认 UNIX 时间戳起点)

但是,加上 @JsonDeserialize(using = LocalDateTimeDeserializer.class)@JsonSerialize(using = LocalDateTimeSerializer.class) 之后,Spring Boot 才能正确解析时间

为什么???

2. 时间戳(推荐,可尝试)

时隔几天,最终确定问题所在,特意补充在第二章的原理分析!

后端获取的数值是1970,是因为前端传输过来的为String类型!

dayjs(this.itemData.inGatTime).format(‘YYYY-MM-DD HH:mm:ss’) 这是String类型,虽然数值显示是时间!

原本this.itemData.inGatTime 是时间戳,那直接把这个时间戳传输到后端也可!

@Schema(description = "进闸时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime inGatTime;

后续是基于前端
dayjs(this.itemData.inGatTime).format(‘YYYY-MM-DD HH:mm:ss’) String类型 传输给后端,但是保存的时候,第三点会无法保存!因为前端还有后端是LocalDateTime格式,只有uniapp可以保存,因为是String类型

3. 使用 @JsonDeserialize & @JsonSerialize(中立)

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import java.time.LocalDateTime;@Schema(description = "进闸时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化
private LocalDateTime inGatTime;
  • @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    👉 告诉 Jackson 解析 yyyy-MM-dd HH:mm:ss 格式的字符串为 LocalDateTime
  • @JsonSerialize(using = LocalDateTimeSerializer.class)
    👉 让 LocalDateTime 按 yyyy-MM-dd HH:mm:ss 格式返回 JSON

这个方案最稳定,推荐使用!

4. 前端传 ISO-8601 格式(不推荐,可尝试)

spring Boot 默认支持 ISO-8601 格式(YYYY-MM-DDTHH:mm:ss),前端这样修改:

inGatTime: dayjs(this.itemData.inGatTime).format('YYYY-MM-DDTHH:mm:ss'),

传输数据:

{"inGatTime": "2025-03-09T19:10:05"
}

后端 LocalDateTime 可以直接解析:

@Schema(description = "进闸时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private LocalDateTime inGatTime;

⚠️ 但这样 LocalDateTime 变成 T 分隔格式,前端接收时要自己处理!

但 我的后端保存到数据还是1970!

5. 用 String(中立)

这个要改字段类型,保持中立,看自身代码好不好修改!

如果 Jackson 解析仍然失败,可以 先用 String 接收,再手动转换 LocalDateTime:

@Schema(description = "进闸时间")
private String inGatTime; // 先接收为字符串

然后在 Service 里转换:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parsedTime = LocalDateTime.parse(createReqVO.getInGatTime(), formatter);

适用于 Jackson 反序列化无效的情况!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31850.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vitepress】如何搭建并部署自己的博客网站

文章目录 新的改变旧的github.io地址,现在不用更新netlify托管之后为这个 一 如何搭建[1]:安装vitepress初始化Vitepress启动项目 二 如何部署[2]视频教程 [3] 新的改变 旧的github.io地址,现在不用 https://dl-hx.github.io/myBlog/ 更新netlify托管之后为这个 https://dl…

Cursor新版0.47.x发布

0.47.x - 可靠性、键盘快捷键与提前体验选项功能 本次更新主要聚焦于稳定性和性能改进,以确保现有功能更好地运行。 新功能与改进 键盘快捷键:所有键盘快捷键现在都可以在键盘快捷键菜单中找到。前往 设置 > 键盘快捷键 来修改或添加新的快捷键。 …

docker 小记

一、卸载 查看当前版本 docker -v2. 如果有,先停止docker systemctl stop docker如果是yum安装,卸载方式为 #已防版本冲突,直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

XGBoost介绍

XGBoost:是eXtreme Gradient Boosting(极端梯度提升)的缩写,是一种强大的集成学习(ensemble learning)算法,旨在提高效率、速度和高性能。XGBoost是梯度提升(Gradient Boosting)的优化实现。集成学习将多个弱模型组合起来,形成一个…

Aliyun CTF 2025 web ezoj

文章目录 ezoj ezoj 进来一看是算法题,先做了试试看,gpt写了一个高效代码通过了 通过后没看见啥,根据页面底部提示去/source看到源代码,没啥思路,直接看wp吧,跟算法题没啥关系,关键是去看源码 def audit_checker(even…

大数据hadoop课程笔记

1.课程导入 柯洁 Alpha Go是人工智能领域的里程碑。 深度学习 大模型deepseek chatgpt 大模型 和 大数据 之间有着非常紧密的关系。可以说,大数据是大模型发展的基石,而大模型是大数据价值挖掘的重要工具。 https://youtu.be/nN-VacxHUH8?sifj7Ltk…

Pandas数据清洗实战之清洗猫眼电影

本次案例所需要用到的模块 pandas(文件读取保存 操作表格的模块) 将上次Scrapy爬取下来的文件 做个数据清洗 变成我们想要的数据 确定目的:将此文件中的duration字段中的分钟 和publisher_time上映去掉 只保留纯数值 数据清洗题目如下: 修复 publish_time列中的错…

UDP-网络编程/socket编程

一,socket相关接口 1,socket 我们来介绍socket编程的第一个接口:socket,它需要用到的头文件如图: 其中domain表示域或者协议家族: 本次我就用AF_INET(ipv4)来做演示 type参数表示…

《人月神话》:软件工程的成本寓言与生存法则

1975年,Fred Brooks在《人月神话》中写下那句振聋发聩的断言——“向进度落后的项目增加人力,只会让进度更加落后”——时,他或许未曾料到,这一观点会在半个世纪后的人工智能与云原生时代,依然如达摩克利斯之剑般悬在每…

ROS云课基础题库-01C++案例-甜甜圈

效率是核心,但效率高的教程会忽略掉非常多的细节。 解决问题的思路和细节对于一个问题的有效求解至关重要。 资料 云课五分钟-02第一个代码复现-终端甜甜圈C-CSDN博客 从云课五分钟到五秒钟焦虑的甜甜圈向前冲-CSDN博客 说明 复现重要性没有那么大,…

Oracle RHEL 5.8 安装 - 呆瓜式

前言 Red Hat Enterprise Linux Server release 5.8 为企业级 SO 镜像。绝大部分企业如果使用Oracle数据库均会使用其企业版 OS ,能够很好的支持数据库的运行 文档目的 当前文档仅针对 VMware Workstation Pro 进行 OS 介质安装。 镜像下载地址 注意&#xff1…

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速,销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点,基于DjangoVue架构构建…

软件IIC和硬件IIC的主要区别,用标准库举例!

学习交流792125321,欢迎一起加入讨论! 在学习iic的时候,我们经常会遇到软件 IC和硬件 IC,它两到底有什么区别呢? 软件 IC(模拟 IC)和硬件 IC(外设 IC)是两种实现 IC 总线通信的方式…

CSS-三大特性,盒子模型,圆角边框,盒子阴影,文字阴影

一、 CSS 的三大特性 CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 1.层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 层叠性原则: 样式冲突,遵循的原…

基于 Qwen2.5-14B + Elasticsearch RAG 的大数据知识库智能问答系统

AI 时代,如何从海量私有文档(非公开)中快速提取精准信息成为了许多企业和个人的迫切需求。 本文介绍了一款基于 Qwen2.5-14B 大语言模型(换成 DeepSeek 原理一致)与 Elasticsearch 搜索引擎构建的大数据知识库智能问答…

算法手记1

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.NC313 两个数组的交集 题目详情: 题目思路: 解题代码: 二.AB5 点击消除 题目详情: 题目思路: 解题代码: 结语 一.NC313 两个数组的交集 牛客网题目链接(点击即可跳转)…

JMeter使用BeanShell断言

BeanShell简介 BeanShell是使用Java语法的一套脚本语言,在JMeter的多种组件中都有BeanShell的身影,如: 定时器:BeanShell Timer前置处理器:BeanShell PreProcessor采样器:BeanShell Sampler后置处理器&am…

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析

【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析 向Kafka Broker服务节点中发送主题消息数据的应用程序被称为生产者,生产者与消费者均属于Kafka客户端,几乎所有主流语言都支持调用客户端API。官方提供了基于Java实现的kafka-clients,用于…

【eNSP实战】配置交换机端口安全

拓扑图 目的:让交换机端口与主机mac绑定,防止私接主机。 主机PC配置不展示,按照图中配置即可。 开始配置之前,使用PC1 ping 一遍PC2、PC3、PC4、PC5,让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…

AWS Bedrock 正式接入 DeepSeek-R1 模型:安全托管的生成式 AI 解决方案

亚马逊云科技(AWS)于 2024 年 1 月 30 日 宣布,DeepSeek-R1 模型 正式通过 Amazon Bedrock 平台提供服务,用户可通过 Bedrock Marketplace 或自定义模型导入功能使用该模型。 DeepSeek-R1,其安全防护机制与全面的 AI 部…