@JsonFormat与@DateTimeFormat注解的使用
最近做开源项目,持久层使用了Spring Data JPA。前面一篇文章介绍过
@CreatedDate
和@LastModifiedDate
的使用,有兴趣的可以先去看下那篇文章。通过前面的注解实现了自动插入时间,这里获取显示时间却又出了问题。所以特此来介绍下这两个注解。
一、@JsonFormat
注:这个注解来自jackson。使用前需要导入Jackson依赖,但是如果你使用的是springboot就不用去单独导入jackson依赖,因为springboot中也用到了jackson,已经导入了。
1、导入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
2、添加注解
在你需要查询出来的时间的数据库字段对应的实体类的属性上添加@JsonFormat。
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class TestClass {
//设置时区为上海时区,时间格式自己据需求定。
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
private Date testTime;
public Date gettestTime() {
return testTime;
}
public void settestTime(Date testTime) {
this.testTime= testTime;
}
}
这里解释一下:
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
pattern:
是你需要转换的时间日期的格式。
timezone:
是时间设置为东八区,避免时间在转换中有误差。提示:
@JsonFormat
注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别。
3、测试
完成上面两步之后,我们用对应的实体类来接收数据库查询出来的结果时就完成了时间格式的转换,再返回给前端时就是一个符合我们设置的时间格式了。
"testTime": "2020-01-12"
二、@DateTimeFormat
1、引入依赖,spring的依赖就不再赘述了。
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.4</version>
</dependency>
2、添加注解
在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@@DateTimeFormat。
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date endTime;
我这里就只贴这两个属性了,这里我两个注解都同时使用了,因为我既需要取数据到前台,也需要前台数据传到后台,都需要进行时间格式的转换,可以同时使用。通过上面两个步骤之后,我们就可以获取一个符合自定义格式的时间格式存储到数据库了。
三、总结
注解@JsonFormat主要是后台到前台的时间格式的转换。
注解@DataFormAT主要是前后到后台的时间格式的转换。