@DateTimeFormat和@JsonFormat注解

文章目录

          • 一、场景复现
            • 1. 准备实体vo
            • 2. 定义⼀个Controller
            • 3. 请求测试
          • 二、⼊参格式化
            • 2.1. 日期转换
            • 2.2. 请求测试
          • 三、 出参格式化
            • 3.1. 现象
            • 3.2. 改造
            • 3.4. 测试验证
            • 3.5. 时间少了8小时
            • 3.6. 解决方案
            • 3.7. 效果图

一、场景复现
1. 准备实体vo

定义⼀个pojo,它有⼀个 java.util.Date 类型的属性 createDate。

package com.sinosoft.business.request;import lombok.Data;import java.util.Date;/*** String类型日期接收处理类** @Author gblfy* @Date 2022-05-26 22:05**/
@Data
public class DateReq {/*** 创建时间*/private Date createDate;
}
2. 定义⼀个Controller
package com.sinosoft.business.controller;import com.sinosoft.business.request.DateReq;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;
import java.util.Date;/*** TODO** @Author gblfy* @Date 2022-05-26 22:12**/
@RestController
@RequestMapping("/date/")
public class DateController {@RequestMapping("test")public DateReq getDate(DateReq vo){System.out.println("date1:"+vo.getCreateDate());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String date = sdf.format(vo.getCreateDate());System.out.println("date2:"+date);DateReq vo2 = new DateReq();vo2.setCreateDate(new Date());return vo2;}
}
3. 请求测试

访问 /date/test ,并传⼊参数:2022-05-26 20:13:21
发现并不能访问成功,会抛出异常:
在这里插入图片描述

分析->因为传⼊的参数是 String 类型的,⽽⽤来接收参数的 DateReq 的 date 属性是 java.util.Date 类型的,类型⽆法转换。

二、⼊参格式化

这时,就可以使⽤ Spring 的 @DateTimeFormat 注解格式化参数,来解决上述问题。
改造 DateReq:

2.1. 日期转换
@Data
public class DateReq {/*** 创建时间*/@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date createDate;
}
2.2. 请求测试

再像上⾯⼀样访问http://localhost:8080/date/test?createDate=2022-05-26 20:13:21,并传⼊参数:2022-05-26 20:13:21

在这里插入图片描述

返回参数变成了数字,等会解决

将在控制台上打印:
date1:Thu May 26 20:13:21 CST 2022
date2:2022-05-26 20:13:21
在这里插入图片描述

可以看到,加⼊ @DateTimeFormat 注解后参数可以被接收到了,但⽇期时间的格式还是需要⾃⼰再⼿动转换⼀下。
因为 @DateTimeFormat 注解的 pattern 属性值指定的⽇期时间格式并不是将要转换成的⽇期格式,这个指定的格式是和传⼊的参数对应
的。
假如注解为:
@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)
则传⼊的参数应该是这样的:
2022/05/26 20:13:21
否则会抛出异常。

三、 出参格式化
3.1. 现象

在上述⽰例中,调⽤接⼝的返回结果为:
“date”: “Thu May 26 20:13:21 CST 2022”

3.2. 改造

这个格式并不是我们想要的,那么如何将其进⾏格式化?这时就需要⽤到 jackson 的 @JsonFormat 注解。
改造 DateReq:

@Data
public class DateReq {/*** 创建时间*/@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createDate;
}
3.4. 测试验证

继续访问 /date/test ,并传⼊参数:2022-05-26 20:13:21,可以看到接⼝返回的结果为:
“date”: “2022-05-26 20:13:21”

3.5. 时间少了8小时

虽然时间格式正确了,但实际上当前时间是 “2022-05-26 12:13:21” ,早了8个⼩时。因为,jackson在序列化时间时是按照国际标准
时间GMT进⾏格式化的,⽽在国内默认时区使⽤的是CST时区,两者相差8⼩时。
所以,@JsonFormat 注解还要再加⼀个属性:

3.6. 解决方案
  • 1 添加注解属性
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
  • 2 添加时区
    数据库连接添加
&serverTimezone=Asia/Shanghai

这样,结果就正确了。
因为 @JsonFormat 注解不是 Spring ⾃带的注解,所以使⽤该注解前需要添加 jackson 相关的依赖包。当然,如果是 SpringBoot 项⽬
就不需要⾃⼰⼿动添加依赖了,因为在 spring-boot-start-web 下已经包含了 jackson 相关依赖
在这里插入图片描述

3.7. 效果图

在这里插入图片描述

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

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

相关文章

初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

1 设计目的 《Web应用开发课程设计》是实践性教学环节之一,是《Web程序设计》课程的辅助教学课程。通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握软件开发的基本概念、…

使用AnalyticDB轻松实现以图搜图和人脸检索

1. 背景 以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截图想知道出处的时候只要将图片粘贴到百度或者谷歌的图搜框中就可以找到…

年后跳槽季,如何在编程面试中大获成功?

【CSDN 编者按】作为技术人,在面向编程面试之前,应该如何进行相应的准备?作者 | Noj Vek 译者 | 弯月责编 | 屠敏出品 | CSDN(ID:CSDNnews)本文的作者经历过100多场面试,而且也担任过50多场面试…

HbuilderX中 华为手机 真机调试

文章目录一、场景浮现1. 真机运行2. 问题描述二、解决方案2.1. 终端设置2.2. 开启开发者模式2.3. 开启USB调试2.4. 连接模式选择2.5. 重新运行2.6. 选择设备2.7. 手机真机调试一、场景浮现 1. 真机运行 直接运行Hbuilder中的“运行”,无法显示对应设备 2. 问题描述…

一云多端,连接万物:智能接入网关2.0升级技术揭秘

一云多端,连接万物:全新发布SAG-APP和SAG-vCPE 阿里云提供了多种产品形态支持各种场景上云,SAG2.0发布了SAG-APP支持各种操作系统的终端接入上云,同时发布了SAG-vCPE支持3rd云资源通过虚拟机或容器环境接入阿里云,本次…

网上购物商城 html+css+MVC+sql server+idea编辑器实现。

最近又找到了jsp学习结束后时,最后做的一个网上购物商城小项目,总体分为用户和管理员两个模块,用户注册之后登录,进行商品浏览加购物车并购买评价,管理员负责商品的增删查改以及订单的发货等等,可以说功能比…

幕享手机投屏

前提:手机电脑连接同一个局域网或者无线网 https://letsview.cn/

通俗的讲,这就是容器CPU隔离的底层实现机制

来源 | 刘超的通俗云计算责编 | 寇雪芹头图 | 下载于视觉中国在真正的生产实践过程中,对于CPU的隔离要求比容器的默认策略要严格的多,因而需要对于Linux内核底层机制有所理解,才能很好的做CPU隔离,甚至在离线业务混合部署隔离等策…

OAM创始团队:揭秘OAMKubernetes实现核心原理

作者 | Andy Shi(阿里云高级技术专家)、天元(阿里云技术专家) 今年 5 月,阿里云和微软云共同宣布,Open Application Model (OAM) 社区携手知名混合云管理项目 Crossplane 社区&…

一文读懂人类信息存储进化史

感兴趣的同学,欢迎点击查看详情哦 在很久很久以前 那个时代语言和文字还没出现 人们的还都是通过“呜呜呜”的方式来进行沟通 但是事情还是得记的 因此“结绳记事”这种方法开始在人群里开始流行 但是,事情总归是越来越多,结也会越来越多 到最…

node+express创建第一个node项目

一、安装nodejs 1.到官网下载nodejs安装包 中文官网地址:http://nodejs.cn/ 英文官网地址:https://nodejs.org/en/ 根据自己的系统和版本,选择下载对应的安装包! 下面的安装以windows 64 位系统版本安装包为例! 2.双…

听一个内行人讲云原生简史

作者 | 吕建伟责编 | 寇雪芹头图 | 下载于视觉中国引子1999年,发生在我自己身上的几件事:1、买了两张盗版光盘:Sun Solaris OS、红帽Linux。2、正在用COM、MTS,开发三层架构的局域网内的大型企业商用套件,由Windows客户…

一个连续创业者的不破不立——对话阿里云MVP蒋烁淼

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 他是公认的“湖畔第一大脑”,被王坚院士称为“云计算的试飞员”。跟他聊下来,仿佛上…

node+express项目链接MySQL数据库(最简单版)

nodeexpress项目链接MySQL数据库(最简单版) (假定你nodeexpress项目已创建完成,可参照这里) 第一步、安装mysql驱动 npm install mysql --save-dev第二部、创建数据库表 第三部、连接数据库 在app.js下写入以下代码…

阿里云量产50家独角兽前夜

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在阿里云SaaS加速器出现前后,中国的IT史上其实出现过各式各样的加速器、训练营。究竟在加速什么?怎么…

企业微信_H5应用如何真机调试_host配置及代理相关

文章目录三、手机调试3.1. 代理软件3.2. 安装,启动3.3. 连接无线网3.4. 代理端口3.5. 手机连接无线网3.6. 设置代理3.7. 代理允许3.8. 手机企微登录3.9. 效果图3.10. 代理监控三、手机调试 手机电脑需要连接同一个无线网或者局域网 3.1. 代理软件 下载代理软件 cha…

关于容器底层,超详细的 Namespace 机制讲解

来源 | 多选参数责编 | 寇雪芹头图 | 下载于视觉中国NamespaceLinux Namespace 是 Linux 提供的一种内核级别环境隔离的方法。这种隔离机制和 chroot 很类似,chroot 是把某个目录修改为根目录,从而无法访问外部的内容。Linux Namesapce 在此基础之上&…

从零入门Serverless|一文搞懂函数计算及其工作原理

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是函数计算? 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器…

在线视频面试业务融合阿里云,助您找到心仪好工作

“您好,可以听到吗?“ “……. 您…好,我…这里画面卡顿….了!” “…..不好意….思,能重复一下您刚才的描述吗吗吗,没听太清….楚…………..” “哎,感觉这次又糊了,这已经是我的第…