使用JsonFormat和DataTimeFormat前后端时间格式转换
情景
今天在进行前后台对接的时候(SPring Boot/cloud)与前端Vue进行对接,在这个过程当中,发现有一些前端页面的表格内容时间部分也就是创建时间和修改时间字段显示是正常的符合年月日时分秒的一个区分,但是有一些页面的字段就是简单的时间戳,这就比较让人心烦,我首先想到的是使用
new SampleDateFormat的方法待到将值给DTO的时候,直接将时间定义为字符串形式,并给他传递格式化后的时间内容,但是这样显然是比较low的,因为现在做的前后端的数据对接而不是纯后端的格式化打印,尽管如此还是先将SampleDateFormat放到这里,防止遗忘:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main{
public static void main(String[] args){
Date date = new Date();
String strDateFormat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
System.out.println(sdf.format(date));
}
}
但是我随后就想到,之前未拆分服务之前部分格式正常,可能是使用了什么方法或者是注解,我没有使用(体谅小弟Java功力浅薄)
,于是简单一番查阅:
使用到了这样的一个注解的DTO,返回给前端就可以正常展示
/*
*更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date uteTime;
学习记录
使用场景
当我们从数据库获取时间传到前端进行展示的时候,我们无法直接得到满意时间格式因为Date在数据库中的时候展示的内容还是易读式的时间格式,但取出值的时候就变成了不明所以的时间戳1602672098000这种类型,@JsonFormat注解就能够十分出色的解决这个头疼的问题,只要在返回结果集包裹的时间属性上使用上述的写法,就能返回正确格式。
拓展
①使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,②另一个问题当我们在使用WEB服务例如提交一个表单数据非常容易碰到时间相关的值例如出生日期,注册时间等等那么该怎么传递不至于出错或者是易读呢,因为前台传递给后台的时间格式也是不同格式的,为了解决这个问题就有了与上面后端->前端对应的另一个注解:@DataTimeFormat
使用方法
@JsonFormat
引用依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>{jackson.version}</version>
<!--可以使用2.9.2版本-->
</dependency>
使用
package xxx;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import java.util.Date;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FakeNewsDTO {
/*
*状态
*/
private String status;
/*
*创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date cteTime;
/*
*创建人
*/
private String cteUser;
/*
*更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date uteTime;
/*
*更新人
*/
private String uteUser;
}
@DataTimeFormat
引用依赖
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
使用:
在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date terminatedTime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date fakeTime;
总结:
注解@JsonFormat 后端=>前端 时间格式的转换
注解@DataFormAT 前端=>后端 时间格式的转换
我又懂了

浙公网安备 33010602011771号