网络知识 娱乐 @JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

先看看@JsonFormat、@JSONField、@DateTimeFormat 三个注解的常见用法:

@JSONField(format = "yyyy-MM-dd HH:mm:ss")n@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")n@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")nprivate LocalDate birthday;n

前端读取数据库日期字段时使用 @JsonFormat和@JSONField 可以将时间戳转为格式化的日期数据。

前端使用JSON提交时用@JsonFormat和@JSONField 注解。

前端使用Form提交时用@DateTimeFormat 注解。

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例


一、@JsonFormat 注解

@JsonFormat 注解来源于jackson,Jackson是一个简单的基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。

<dependency>n <groupId>com.fasterxml.jackson.core</groupId>n <artifactId>jackson-databind</artifactId>n <version>2.11.3</version>n</dependency>

在 spring-boot-starter-web 下已经包含了 jackson 相关依赖,如图所示:

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

用法为在属性值上@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8"),因为我们是东八区(北京时间),所以在格式化的时候要指定时区(timezone )。

  • pattern: 表示日期的格式
  • timezone: 默认是GMT,中国需要GMT+8


引入以上的Maven依赖之后,就可以在实体类属性上面使用@JsonFormat注解了。要注意的是,它只会在声明返回类型为json时,比如使用@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间。如果直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2021”这样的时间样式。

恰当的使用@JsonFormat可以使代码更加简洁,因为它可以减少很多不必要的类型转换。


二、@JSONField 注解

@JSONField 注解来源于fastjson,是阿里巴巴的开源框架,主要进行JSON解析和序列化。

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

fastjson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个:

  • 修改和json字符串的字段映射【name】
  • 格式化数据【format】
  • 过滤掉不需要序列化的字段【serialize】


(1)修改字段映射使用方法

private Integer aid;nn// 实体类序列化为json字符串的时候,此类的aid字段,序列化为json中的testid字段n@JSONField(name="testid")npublic Integer getAid() {n return aid;n}nn// json字符串解析为类实体的时候,json中的id字段,写入此类的aid字段n@JSONField(name="id")npublic void setAid(Integer aid) {n this.aid = aid;n}


(2)格式化使用方法

@JSONField(format = "yyyy-MM-dd HH:mm:ss")npublic Date getDateCompleted(...)


(3)过滤不需要序列化的字段

@JSONField(serialize = false)npublic Integer getProgress() {n return progress;n}


三、@DateTimeFormat 注解

@DateTimeFormat是Spring自带的处理框架,主要用于将时间格式化。将String转换成Date,一般前台给后台传值时用。

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例

@DateTimeFormat 注解的 pattern 属性值指定的日期时间格式并不是将要转换成的日期格式,这个指定的格式是和传入的参数对应的,假如注解为:

@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss")

则传入的参数应该是这样的:2022/07/02 22:05:55,否则会抛出异常。

@JsonFormat、@JSONField、@DateTimeFormat注解的使用示例