使⽤JsonFormat和DataTimeFormat前后端时间格式转换
情景
今天在进⾏前后台对接的时候(SPring Boot/cloud)与前端Vue进⾏对接,在这个过程当中,发现有⼀些前端页⾯的表格内容时间部分也就是创建时间和修改时间字段显⽰是正常的符合年⽉⽇时分秒的⼀个区分,但是有⼀些页⾯的字段就是简单的时间戳,这就⽐较让⼈⼼烦,我⾸先想到的是使⽤
new SampleDateFormat的⽅法待到将值给DTO的时候,直接将时间定义为字符串形式,并给他传递格式化后的时间内容,但是这样显然是⽐较low的,因为现在做的前后端的数据对接⽽不是纯后端的格式化打印,尽管如此还是先将SampleDateFormat放到这⾥,防⽌遗忘:
SimpleDateFormat;
import java.util.Date;
public class Main{
public static void main(String[] args){
vue json字符串转数组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.</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 前端=>后端 时间格式的转换
我⼜懂了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论