@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…

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

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

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

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

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

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

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…

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;然而由于当…

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

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

抖音运营_打造高流量的抖音账号

目录 一 账号定位 行业定位 用户定位 内容定位 二 账号人设 我是谁? 我的优势 我的差异化 三 创建账号 名字 头像 简介 四 抖音养号 为什么要养号&#xff1f; 抖音快速养号 正确注册抖音账号 一机一卡一号 实名认证 正确填写账号信息 养号期间的操作 五…

韵搜坊 -- Elastic Stack快速入门

文章目录 现有问题Elastic Stack介绍&#xff08;一套技术栈&#xff09;安装ES安装KibanaElasticsearch概念倒排索引Mapping分词器IK分词器&#xff08;ES插件&#xff09;打分机制 ES的几种调用方式restful api调用&#xff08;http 请求&#xff09;kibana devtools客户端调…

程序员做推广?我劝你别干

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这是卢松松会员专区&#xff0c;一位会员朋友的咨询&#xff0c;如果你也有自研产品&#xff0c;但不知道如何推广&#xff0c;一定要阅读本文!强烈建议收藏关注&#xff0c;因为你关注的人&#xff0c;决定你看到的…

【机器学习300问】98、卷积神经网络中的卷积核到底有什么用?以边缘检测为例说明其意义。

卷积核是用于从输入数据中提取特征的关键工具。卷积核的设计直接关系到网络能够识别和学习的特征类型。本文让我以边缘检测为例&#xff0c;带大家深入理解卷积核的作用。 一、卷积核的作用 卷积核&#xff0c;又称为过滤器&#xff0c;本质上是一个小的矩阵&#xff0c;其元素…

微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…