Spring boot 中java.util.Date 在json、数据库之间格式的相互转换
来源:互联网 发布:java 封装规则 编辑:程序博客网 时间:2024/06/05 20:37
首先使用springboot开发网站时,经常会涉及到日期的形式,那么在代码中使用java.util.Date
来转化为json格式的字符串,应该怎样转化呢?将Date类型存入数据库有应该怎样实现呢?
Date与json的相互转换
实现Date转换为json格式,json格式转化为Date的方式总的来说有两种。1.使用全局配置
在application.properties配置文件中增加下面两个配置:
#时区设置spring.jackson.time-zone=GMT+8日期期时格式设置置spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
这样配置下来的话所有需要与json字符串互转的Date格式都为:yyyy-MM-dd HH:mm:ss。
下面我们在设置好后测试一下:
其中测试类DateTest1的代码如下:
package com.JPAdemo.JPAdemo.modle;import java.util.Date;/** * Created by dell on 2017/8/8. */public class DateTest1 { private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; }}
controller如下:
@GetMapping("/1") public DateTest1 test1(){ DateTest1 dateTest1=new DateTest1(); dateTest1.setDate(new Date()); return dateTest1; }
运行后使用PostMan测试:
2.使用@Jsonformat、@datetimeformat两个注解局部设置。
与全局配置相比较,使用这两个注解就更加的精细,只需要在你所需要的地方使用这两个注解即可,并且可以设置不同的时间格式。具体使用见下面的Demo:
测试类DateTest2:
package com.JPAdemo.JPAdemo.modle;import com.fasterxml.jackson.annotation.JsonFormat;import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;/** * Created by dell on 2017/8/8. */public class DateTest2 { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date date1; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private Date date2; @DateTimeFormat(pattern = "HH:mm:ss") @JsonFormat(pattern = "HH:mm:ss") private Date date3; public DateTest2() { } public Date getDate1() { return date1; } public void setDate1(Date date1) { this.date1 = date1; } public Date getDate2() { return date2; } public void setDate2(Date date2) { this.date2 = date2; } public Date getDate3() { return date3; } public void setDate3(Date date3) { this.date3 = date3; }}
controller:
//测试Date与json格式的相互转换------局部注解 @GetMapping("/2") public DateTest2 test2(){ DateTest2 dateTest2=new DateTest2(); dateTest2.setDate1(new Date()); dateTest2.setDate2(new Date()); dateTest2.setDate2(new Date()); return dateTest2; }
运行结果:
其中pattern 的值指定了Date与json字符串相互转化的格式。**当全局设置和局部设置同时使用时,局部设置会失效
!!!
**
- Date在数据库中的存取
Date在数据库中的存取,我还没有发现全局设置,目前发现只能通过注解@Temporal
来实现。 @Temporal
的定义如以下所示:
public @interface Temporal { TemporalType value() default TIMESTAMP;}
从定义可以看出,在使用@Temporal
注解时,需要指定枚举类型TemType的值,如果不指定的话默认为TemporalType.TIMESTAMP
,一共有三个可选的值:TemporalType.TIME、TemporalType.DATE、TemporalType.TIMESTAMP。具体的使用看下面的Demo:
DateTest3:
package com.JPAdemo.JPAdemo.modle;import org.springframework.web.bind.annotation.RequestMapping;import javax.persistence.*;import java.util.Date;/** * Created by dell on 2017/8/8. */@Entitypublic class DateTest3 { @Id @GeneratedValue private Integer id; //存取日期+时间 @Temporal(TemporalType.TIMESTAMP) private Date date1; //存取时间 @Temporal(TemporalType.TIME) private Date date2; //存取日期 @Temporal(TemporalType.DATE) private Date date3; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Date getDate1() { return date1; } public void setDate1(Date date1) { this.date1 = date1; } public Date getDate2() { return date2; } public void setDate2(Date date2) { this.date2 = date2; } public Date getDate3() { return date3; } public void setDate3(Date date3) { this.date3 = date3; }}
controller:
@Autowired DateTest3Repository dateTest3Repository; //测试Date在数据库中的存取 @GetMapping("/3") public void test3(){ DateTest3 dateTest3=new DateTest3(); dateTest3.setDate1(new Date()); dateTest3.setDate2(new Date()); dateTest3.setDate3(new Date()); dateTest3Repository.save(dateTest3); }
运行结果:
需要注意的是,TemporalType的三个不同的枚举值对应着数据库中三中不同的时间字段类型,着可以通过在数据库中输入SHOW TABLE 表名 来查看它们分别对应的类型,正因为这些枚举值对应着不同的字段类型,换而言之,当修改其中的枚举值时,对应的表结构也会发生变化,如果你使用的JPA操作数据库的策略是:spring.jpa.hibernate.ddl-auto=update那么必须在修改了TemporalType的值之后删除原先已经创建的表,让JPA在数据库中从新创建表。否则,即使修改了值,根据update的策略,它并不会改变数据库中表中的字段类型,意味着修改无效。
三种不同的枚举值对应者不同的MySQL中时间类型:
TemporalType.TIME--time、TemporalType.DATE--date、TemporalType.TIMESTAMP--datetime
表结构:
本篇文章所用到的代码可以在我的GitHub上找到。
- Spring boot 中java.util.Date 在json、数据库之间格式的相互转换
- Java中util.Date和sql.Date的相互转换
- 在JDBC操作中关于java.util.Date跟java.sql.Date之间的转换问题
- jdbc中Datetime与java.util.Date的相互转换
- java.util.Date与java.sql.Date的相互转换
- java.sql.date和java.util.date的相互转换
- java.sql.Date java.util.Date String 的相互转换
- java中String,Date,Timestamp之间的相互转换
- Java中String和Date、Timestamp之间的相互转换
- oracle数据库和java的Date格式之间的转换
- Java中java.util.Date与java.sql.Date等之间的转换
- java.util.Date 和 java.sql.Date 之间的转换
- java.sql.Date java.util.Date String 之间的转换
- java.util.Date和java.sql.Date之间的转换
- Date 和 String 之间的相互装换 util.date和sql.date转换
- java.sql.Timestamp与java.util.Date的相互转换
- java中string与date(日期)格式之间的转换
- java中string与date(日期)格式之间的转换
- TCP,UDP.HTTP,HTTPS(下)
- 关于别名现象
- 聚类有效性检验(Hubert'Γ )
- 建表语句
- 前端数据结构与算法系列
- Spring boot 中java.util.Date 在json、数据库之间格式的相互转换
- unity3d注意事项
- 关于寻路算法的一些思考(5):处理移动中的障碍物
- springboot添加拦截器
- glob模式
- Linux网络编程(一)socket模型创建
- HDU 6061 RXD and functions
- 前端js面试中的常见的算法问题
- AS-Fragment-cannot resolve method add();