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

文章目录

  • 前言
  • 一、场景如下所示
  • 二、问题分析
  • 三、@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.mzph.cn/news/841027.shtml

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

相关文章

Python基于PyQt6制作GUI界面——按钮

示例对应的制作的 ui文件 界面如下所示。 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Form</class><widget class"QWidget" name"Form"><property name"geom…

ColossalAI Open-Sora 1.1 项目技术报告 (视频生成)

项目信息 项目地址&#xff1a;https://github.com/hpcaitech/Open-Sora技术报告&#xff1a; Open-Sora 1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_01.mdOpen-Sora 1.1&#xff1a;https://github.com/hpcaitech/Open-Sora/blob/main/docs…

swift中json和字典Dict或者数组相互转换,JSONSerialization的强大使用

在Swift中&#xff0c;你可以使用JSONSerialization类将JSON字符串转换为字典。要将 Swift 字典转换为 JSON 字符串&#xff0c;我们可以使用JSONSerialization类的data(withJSONObject:options:)方法。这个方法将字典转换为二进制数据&#xff0c;然后我们可以使用String(data…

Day23:Leetcode:530.二叉搜索树的最小绝对差 + 501.二叉搜索树中的众数 + 236. 二叉树的最近公共祖先

LeetCode&#xff1a;530.二叉搜索树的最小绝对差 问题描述 解决方案&#xff1a; 1.思路 中序遍历 2.代码实现 class Solution {int pre;int ans;public int getMinimumDifference(TreeNode root) {ans Integer.MAX_VALUE;pre -1;dfs(root);return ans;}public void d…

TCP协议三次握手、四次挥手

目录 TCP协议三次握手的方式建立连接TCP协议四次挥手的方式关闭连接 TCP协议三次握手的方式建立连接 第一次握手&#xff08;SYN&#xff09;&#xff1a;客户端向服务器发送SYN报文&#xff0c;请求建立连接。该报文包含客户端选择的初始序列号&#xff08;ISN&#xff09;&a…

Unity射击游戏开发教程:(26)创建绕圈跑的效果

unity游戏 在本文中,我将介绍如何为敌人创建圆周运动。gif 中显示的确切行为是敌人沿着屏幕向下移动,直到到达某个点,一旦到达该点,它就会绕圈移动。

从浮点数定义到FP8: AI模型中不同的数据类型

背景&#xff1a;AI模型中不同的数据类型对硬件算力和内存的需求是不同的&#xff0c;为了提高模型在硬件平台的吞吐量&#xff0c;减少数据通信带宽需求&#xff0c;往往倾向于将高位宽数据运算转向较低位宽的数据运算。本文通过重新回顾计算机中整数和浮点数的定义&#xff0…

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第3节 (内存管理技巧 )

13.3 内存管理技巧 Object Pascal中的内存管理遵循三个简单的规则&#xff1a;您必须创建每个对象并分配您需要的每个内存块&#xff1b;您必须销毁您创建和分配的每个对象和内存块&#xff1b;每个对象仅销毁一次。对于动态元素&#xff08;即不在堆栈和全局内存区域中的元素…

解决1万条数据前端渲染不卡的问题

万级数据前端渲染优化 解决思路requestAnimationFrame完整代码 解决思路 将数据分组&#xff0c;通过定时器或requestAnimationFrame两种方式分组渲染到Dom上 requestAnimationFrame 渲染数据-动画requestAnimationFram方法 使用requestAnimationFrame可以将动画的每一帧绘制…

HCIP-Datacom-ARST自选题库__ISIS简答【3道题】

1.IS-1S是链路状态路由协议&#xff0c;便用SPF算法进行路由计算。某园区同时部署了IPv4和IPV6井运行IS-IS实现网络的互联互通&#xff0c;如图所示&#xff0c;该网络IPv4和IPV6开销相同&#xff0c;R1和R4只支持IPV4。缺省情况下&#xff0c;计算形成的IPv6最短路径树中&…

MySQL-笔记-10.关系模式的规范化理论

目录 10.1 规范化内容和异常 问题1:数据冗余 问题2:更新异常 问题3:插入异常 问题4:删除异常 10.2 函数依赖 10.2.1 函数依赖的定义 10.2.2 函数依赖与属性之间类型有关 10.2.3 函数依赖的类型 10.2.3.1 平方函数依赖、非平凡函数依赖 10.2.3.2 完全函数依赖、部分函数…

python数据分析——字符串和文本数据2

参考资料&#xff1a;活用pandas库 1、字符串格式化 &#xff08;1&#xff09;格式化字符串 要格式化字符串&#xff0c;需要编写一个带有特殊占位符的字符串&#xff0c;并在字符串上调用format方法向占位符插入值。 # 案例1 varflesh wound s"Its just a {}" p…

solidworks画螺母学习笔记

螺母 单位mm 六边形 直径16mm&#xff0c;水平约束&#xff0c;内圆直径10mm 拉伸 选择两侧对称&#xff0c;厚度7mm 拉伸切除 画相切圆 切除深度7mm&#xff0c;反向切除 拔模角度45 镜像切除 倒角 直径1mm 异形孔向导 螺纹线 偏移打勾&#xff0c;距离为2mm…

Parquet文件格式详解(含行、列式存储区别)

Parquet文件格式详解 Parquet 是一种列式存储格式&#xff0c;旨在高效地存储和处理大规模数据集。它被设计用于在大数据生态系统中进行数据存储和分析&#xff0c;如 Apache Hadoop 和 Apache Spark。 行式存储 vs 列式存储 在了解 Parquet 文件格式之前&#xff0c;先来对…

java:static关键字用法

在静态方法中不能访问类的非静态成员变量和非静态方法&#xff0c; 因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。 从上面代码里看出&#xff1a; 1.静态方法不能调用非静态成员变量。静态方法test2()中调用非静态成员变量address&#xff0c;编译失败…

从容应对亿级QPS访问,Redis还缺少什么?no.29

众所周知&#xff0c;Redis 在线上实际运行时&#xff0c;面对海量数据、高并发访问&#xff0c;会遇到不少问题&#xff0c;需要进行针对性扩展及优化。本课时&#xff0c;我会结合微博在使用 Redis 中遇到的问题&#xff0c;来分析如何在生产环境下对 Redis 进行扩展改造&…

算法金 | Dask,一个超强的 python 库

本文来源公众号“算法金”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Dask&#xff0c;一个超强的 python 库 1 Dask 概览 在数据科学和大数据处理的领域&#xff0c;高效处理海量数据一直是一项挑战。 为了应对这一挑战&am…

滑动菜单栏

效果如下&#xff1a; NavigationView 新建menu布局,表示菜单栏的选项 <menu xmlns:android"http://schemas.android.com/apk/res/android"> <group android:checkableBehavior"single"> <item android:id"id/navCall" android…

海外CDN加速方式

随着全球化经济的进一步推进和互联网时代的到来&#xff0c;给对外贸易行业带来了巨大的商机&#xff0c;众多传统的贸易公司都纷纷建立起自已的外贸网站或服务站点等各种信息化平台&#xff0c; 相当多的贸易公司也从他们所构建的平台中得到了很高的利益&#xff0c;然而由于当…