先看看@JsonFormat、@JSONField、@DateTimeFormat 三个注解的常见用法:
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDate birthday;
前端读取数据库日期字段时使用 @JsonFormat和@JSONField 可以将时间戳转为格式化的日期数据。
前端使用JSON提交时用@JsonFormat和@JSONField 注解。
前端使用Form提交时用@DateTimeFormat 注解。
@JsonFormat 注解来源于jackson,Jackson是一个简单的基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。
com.fasterxml.jackson.core
jackson-databind
2.11.3
在 spring-boot-starter-web 下已经包含了 jackson 相关依赖,如图所示:
用法为在属性值上@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8"),因为我们是东八区(北京时间),所以在格式化的时候要指定时区(timezone )。
引入以上的Maven依赖之后,就可以在实体类属性上面使用@JsonFormat注解了。要注意的是,它只会在声明返回类型为json时,比如使用@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间。如果直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2021”这样的时间样式。
恰当的使用@JsonFormat可以使代码更加简洁,因为它可以减少很多不必要的类型转换。
@JSONField 注解来源于fastjson,是阿里巴巴的开源框架,主要进行JSON解析和序列化。
fastjson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个:
(1)修改字段映射使用方法
private Integer aid;
// 实体类序列化为json字符串的时候,此类的aid字段,序列化为json中的testid字段
@JSONField(name="testid")
public Integer getAid() {
return aid;
}
// json字符串解析为类实体的时候,json中的id字段,写入此类的aid字段
@JSONField(name="id")
public void setAid(Integer aid) {
this.aid = aid;
}
(2)格式化使用方法
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
public Date getDateCompleted(...)
(3)过滤不需要序列化的字段
@JSONField(serialize = false)
public Integer getProgress() {
return progress;
}
@DateTimeFormat是Spring自带的处理框架,主要用于将时间格式化。将String转换成Date,一般前台给后台传值时用。
@DateTimeFormat 注解的 pattern 属性值指定的日期时间格式并不是将要转换成的日期格式,这个指定的格式是和传入的参数对应的,假如注解为:
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss")
则传入的参数应该是这样的:2022/07/02 22:05:55,否则会抛出异常。
留言与评论(共有 0 条评论) “” |