0


SpringBoot - @JsonFormat注解详解

写在前面

@JsonFormat注解,是在Jackson中定义的一个注解,是一个时间格式化注解。此注解用于属性上,作用是把DATE类型的数据转化成为我们想要的格式。
比如:存储在MYSQL中的数据是dateTime类型,将数据获取以后封装到实体类中的时候,就会变成英文的时间格式(Wed Jul 27 02:26:43 CST 2022),而不是yyyy-MM-dd HH:mm:ss格式的时间(2022-07-27 02:26:43),@JsonFormat注解就可以解决这个问题。

一句话说明

该注解可用于返回日期数据时的时间格式化。
如果前端传来的为字符串格式的日期:“2022年07月29日 09时41分22秒”,则需要如下配置:
@JsonFormat(pattern = “yyyy年MM月dd日 HH时mm分ss秒”)
private Date createTime;
解析后存入DB中的则为:2022-07-29 09:41:22,而在查询时返回的数据则为:“2022年07月29日 09时41分22秒”

如何使用?

① 引入依赖

@JsonFormat注解不是SPRING自带的注解,而是Jackson的注解,所以使用该注解前需要添加jackson相关的依赖包。当然如果是 SpringBoot项目就不需要自己手动添加依赖了,因为在spring-boot-start-web下已经包含了jackson的相关依赖了。

<!-- JSON工具类 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.6</version></dependency>
② 添加注解

在实体类属性上面使用@JsonFormat注解。

/**
* 创建时间
*/@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")privateDate createTime;/**
* 更新时间
*/@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")privateDate updateTime;
③ 注意事项

只是在将实体返回JSON格式数据时才有效的转换为(yyyy-MM-dd HH:mm:ss)格式的时间,其他时候日期格式不会被转换。

相差8小时

JASKSON在序列化时间时是按照国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时,因为我们是东八区(北京时间),所以我们在格式化的时候要指定时区(timezone)。

中国时间(Asia/Shanghai) = 格林尼治时间(GMT)+ 8
格林尼治时间(GMT) = 世界协调时间(UTC) + 0

/**
* 创建时间
*/@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")privateDate createTime;/**
* 更新时间
*/@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")privateDate updateTime;

时区概念

GMT(格林尼治时间),Greenwich Mean Time ,这是以英国格林尼治天文台观测结果得出的时间,这是英国格林尼治这个地方的时间,是过去使用的世界标准的时间;

UT(世界时),Universal Time ,这是根据原子钟计算出来的时间。

UTC(世界协调时间),Coordinated Universal Time,因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年,协调世界时组织委员会都会给世界时+1秒,让基于原子钟的世界时和基于天文学的格林尼治标准时间相差不至于太大,是现在使用的世界标准时间。

协调世界时不与任何地区位置相关,也不代表此刻某个地区的时间,所以在说明某地时间时要加上时区。
也就是说:GMT并不等于UTC,而是等于UTC+0,只是格林尼治刚好在0时区上。

A. 中国时间(Asia/Shanghai) = 格林尼治时间(GMT)+ 8
B. 格林尼治时间(GMT) = 世界协调时间(UTC) + 0

数据库的时区设置

url: jdbc:mysql://localhost:3306/servicex-single?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

源码说明

@Target({ElementType.ANNOTATION_TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@JacksonAnnotationpublic@interfaceJsonFormat{String DEFAULT_LOCALE ="##default";String DEFAULT_TIMEZONE ="##default";// 表示序列化后日期的格式,比如:yyyy-MM-dd HH:mm:ss 或者 yyyy年MM月dd日 HH时mm分ss秒Stringpattern()default"";// 表示序列化后的一种类型,默认为JsonFormat.Shape.ANYJsonFormat.Shapeshape()defaultJsonFormat.Shape.ANY;// 根据位置序列化的一种格式,默认为本地的语言简称,中国的语言简称为zh_CNStringlocale()default"##default";// 指定时区,默认是GMT,北京时间为:GMT+8Stringtimezone()default"##default";OptBooleanlenient()defaultOptBoolean.DEFAULT;JsonFormat.Feature[]with()default{};JsonFormat.Feature[]without()default{};...}
标签: spring boot java

本文转载自: https://blog.csdn.net/goodjava2007/article/details/126028371
版权归原作者 cloneme01 所有, 如有侵权,请联系我们删除。

“SpringBoot - @JsonFormat注解详解”的评论:

还没有评论