@JsonFormat注解出现日期序列化以及反序列化问题(日期比实际日期少一天)

news2024/11/15 17:29:31

文章目录

  • 前言
  • 一、场景如下所示
  • 二、问题分析
  • 三、@JsonFormat注解是什么
    • 以下是 @JsonFormat 注解的一些常用属性:
  • 四、解决问题
    • 解决方式:只需要指定对应的时区就好
    • 效果如下:
  • 五、@JsonFormat 注解时出现日期问题
  • 总结


前言

  在一次的偶然机会下发现了一个小问题,场景是这样的:新增员工信息,里面包含一个参加工作的时间,和进入公司的时间,当我查询这个员工的数据时,发现查询出来的时间都少了一天,但是看数据库存储的数据又是对的,那么这是为什么呢?


一、场景如下所示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二、问题分析

  既然数据库数据是正常的,说明插入数据的传输是没问题的,那么就只能是查询出了问题,接着我就对查询接口进行debuger,但跟了一遍代码发现数据都是没问题的,最后发现是controller响应数据对数据进行JSON序列化后日期才少了一天,那么问题就很简单了,看看JSON序列化为什么会少一天,进行进一步排查发现是因为使用@JsonFormat注解不当的问题,情况如下:

在这里插入图片描述


三、@JsonFormat注解是什么

  @JsonFormat 注解是 Jackson 库提供的一个功能,它允许你控制 Java 对象序列化成 JSON 字符串时日期和时间的格式,以及反序列化时的行为。这个注解可以应用于 Java 类的字段、getter 方法或者类本身。

以下是 @JsonFormat 注解的一些常用属性:

  • shape:指定输出的日期时间形状,可以是 STRING(默认)、NUMBER 或 DATE。
  • pattern:指定日期时间的格式,例如 “yyyy-MM-dd HH:mm:ss”。
  • timezone:指定时区,例如 “GMT+8” 或 “UTC”。
  • locale:指定地区设置,用于格式化日期。
  • lenient:指定解析日期时是否宽松,true 表示宽松,false 表示严格。
  • date:如果 shape 是 NUMBER,则指定日期时间的类型,可以是 java.util.Date 或 java.sql.Date。
  • pattern 属性通常与 shape 为 STRING 时一起使用,定义日期时间字符串的格式。

四、解决问题

问题原因:我们在格式化的时候要指定时区(timezone ),是因为@JsonFormat注解默认的时区为格林尼治时间,比中国时间(东八区是要小8个小时的),所以查询接口返回时进行JSON序列化时就减少了8小时,从而导致出现少了一天的情况。

解决方式:只需要指定对应的时区就好

在这里插入图片描述

效果如下:

在这里插入图片描述


五、@JsonFormat 注解时出现日期问题

  1. 时区问题:如果你的服务器和客户端位于不同的时区,或者你的数据库存储的是 UTC 时间而你的应用服务器是本地时间,这可能会导致日期偏差。确保你的应用正确处理时区。

  2. 日期格式问题:@JsonFormat 允许你指定日期格式,如果格式不正确或者与实际日期不匹配,也可能导致日期错误。检查你的日期格式字符串是否正确。

  3. 序列化/反序列化配置问题:确保你的 Jackson 配置正确,比如 ObjectMapper 的配置,是否正确处理了日期。

  4. 数据库存储问题:如果你的数据库存储的是时间戳,并且时间戳是基于某个特定的时区,那么在转换为日期时可能会出现偏差。

  5. 注解使用问题:检查 @JsonFormat 注解的使用是否正确,比如是否正确地应用在了字段上,以及注解的属性是否设置正确。


总结

  • 本文简单讲述了使用@JsonFormat注解出现日期问题,比如日期比实际数据日期少一天等,着重讲了产生的原因和解决方式。
  • 欢迎大家提出建议以及批评,有任何问题可以私信。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jmeter服务器性能监控分析工具ServerAgent教程

ServerAgent介绍:支持监控CPU,memory,磁盘,网络等,和JMeter集成,在JMeter的图形界面中,可以实时看到监控的数据,但是,它只能监控硬件资源使用情况。 不能监控应用服务 S…

【正点原子Linux连载】 第四十六章 M.2硬盘驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

数据结构:二叉树与树

一 树的基本概念: 1.树的形状: 2.树的定义: 树是一种非线性的数据结构,它是n(n > 0)个结点的有限集。当n 0时,称为空树。在任意一棵非空树中应满足: 2.1 有且仅有一个特定的称为根的结点。 2.2 当n …

Linux基础(五):常用基本命令

从本节开始,我们正式进入Linux的学习,通过前面的了解,我们知道我们要以命令的形式使用操作系统(使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。),因此,我们是很有…

【深度学习实战—7】:基于Pytorch的多标签图像分类-Fashion-Product-Images

✨博客主页:王乐予🎈 ✨年轻人要:Living for the moment(活在当下)!💪 🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法】 目录 😺一、数据…

解决Element组件el-switch在Vue中值的绑定与回显问题

概要 Switch 开关表示两种相互对立的状态间的切换,多用于触发「开/关」。可当一个布尔值进行使用。 问题描述与解决 引入Element组件的switch到Vue中,可以读取switch的值,但如果放在页面中,不能回显上去。 如上图,无论值是"否"还是“是”。都不能正确渲染到页…

【Linux学习】深入了解Linux中进程状态及其转换

文章目录 进程状态进程排队进程的状态(运行,阻塞,挂起)进程的七个状态 孤儿进程 进程状态 进程 task_struct 可执行程序 进程不是一 直在运行的,可能在等待软硬件资源,比如scanf后,程序停止运…

【ARFoundation自学03】平面追踪可视化效果美化

对已检测到的平面默认的渲染效果显得有些生硬和突兀,有时我们需要更加友好、美观的的平面虚拟界面,这时就需要对已检测到的平面定制个性化的可视方案。为达到更好的视觉效果,处理的思路如下。 视觉效果前后对比! (本节…

从cuda到cudnn到pytorch

一、预配版本信息 1、cuda12.1.1 2、cudnn8.9.7 3、pytorch2.2.0 二、引用 深度学习之环境配置:【CUDA 12.1.1cuDNN 8.9.1】最新安装教程记录 -- 20240429_torch 1.12.0对应torchvision-CSDN博客 补充: cuda历史版本索引: NVIDIA Dev…

只需一行代码提高3DGS重建质量!随机初始化新SOTA

论文标题: Relaxing Accurate Initialization Constraint for 3D Gaussian Splatting 论文作者: Jaewoo Jung, Jisang Han, Honggyu An, Jiwon Kang, Seonghoon Park and Seungryong Kim 导读: 3DGS在新视角合成和三维重建方面展现了令人印…

医疗科技:UWB模块为智能医疗设备带来的变革

随着医疗科技的不断发展和人们健康意识的提高,智能医疗设备的应用越来越广泛。超宽带(UWB)技术作为一种新兴的定位技术,正在引领着智能医疗设备的变革。UWB模块作为UWB技术的核心组成部分,在智能医疗设备中发挥着越来越…

【开发 | 环境配置】解决 VSCode 编写 eBPF 程序找不到头文件

问题描述: 在使用 vscode 编写 eBPF 程序时,如果不做一些头文件定位的操作,默认情况下头文件总是带有“红色下划线”,并且大部分的变量不会有提示与补全。 在编写代码文件较小时(或者功能需求小时)并不会…

Java虚拟机揭秘-底层驱动力,性能保障!

Java虚拟机作为Java技术体系的核心组成部分,其重要性不言而喻。它不仅为Java提供了跨平台的能力,更是Java程序运行的基石。本文将为您深入解析Java虚拟机的工作原理、作用和应用场景,并通过生动的实例让您彻底理解这一关键技术。 一、Java虚拟…

可视化 | Seaborn中的矩阵图及示例

Seaborn是python提供的一个很棒的可视化库。它有几种类型的绘图,通过这些绘图,它提供了惊人的可视化能力。其中一些包括计数图,散点图,配对图,回归图,矩阵图等等。本文讨论了Seaborn中的矩阵图。 示例1&am…

《计算机网络微课堂》2-2 物理层下面的传输媒体

请大家注意,传输媒体不属于计算机网络体系结构的任何一层,如果非要将它添加到体系结构中,‍‍那只能将其放在物理层之下。 传输媒体可分为两类:一类是导引型传输媒体,‍‍另一类是非导引型传输媒体。 在导引型传输媒体…

操作系统总结4----死锁的处理策略总结

目录 2.4.2 死锁的处理策略-----预防死锁 (1)知识总览 (2)破环互斥条件 (3)破环不剥夺条件 (4)破环求情和保持条件 (5)破环循环等待条件 总结 2.4.3 死…

使用Python Tkinter创建GUI应用程序

大家好,当我们谈及使用Python Tkinter创建GUI应用程序时,我们涉及的不仅是技术和代码,更是关于创造力和用户体验的故事。Tkinter作为Python标准库中最常用的GUI工具包,提供了丰富的功能和灵活的接口,让开发者能够轻松地…

《计算机网络微课堂》2-3 传输方式

本节课我们介绍几种传输方式: 串行传输和并行传输同步传输和异步传输单工,半双工‍‍以及全双工通信 ​​ ‍ 串行 我们首先来看串行传输和并行传输,串行传输是指‍‍数据是一个比特依次发送的,因此在发送端和接收端之间‍‍只…

YOLOv10 论文学习

论文链接:https://arxiv.org/pdf/2405.14458 代码链接:https://github.com/THU-MIG/yolov10 解决了什么问题? 实时目标检测是计算机视觉领域的研究焦点,目的是以较低的延迟准确地预测图像中各物体的类别和坐标。它广泛应用于自动…

速看!!!24上软考-信息系统项目管理师真题回忆,考点已更新

整理了24上半年软考高级信息系统项目管理师的考试真题,软考一个批次一套题,现在都是机考,收集题目比较困难,希望能给个小小的赞支持一下。 注意:当天考试的宝子们可以对答案预估分数!后面场次的宝子可以提…