前端的时间格式都是根据日期控件形成的,接着转换成字符串的格式发送给后台,但是后台数据库的时间格式基本都是Date类型,与字符串无法匹配,需要后台先进行转换再写入数据库,有些繁琐了,现下就有一个好的办法
@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "CREATETIME")
private Date createtime;
这个注解是用来格式转换的,等价于
SimpleDateFormat这个转换类,省去了几行的代码,注解会自动的将存入的字符串类型转换成日期格式,只需要在实体类的字段属性上加上就可以
但是,这里有一个小bug,有的时候前端传入的格式是:yyyy-MM-dd,那这个注解就会失效了,找到了一个解决办法
/**
* 重载了Contriller方法,让前端传入的String类型时间格式对实体类的类型进行匹配
* @param binder 前端传入参数
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
将这个这个在Controller中重载下来,将格式提前转换,这样注解就会有用了
另外有一点,在前端通过接口获取时间数据的时候,通常数据库会返回一段时间戳给前端,还需要后台先进行转换了再发送给前端,现下有一个注解可以完美融合,省略后台转换代码,直接将时间戳进行格式化发送给前端
/**
* 获取创建时间
*
* @return CREATETIME - 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
public Date getCreatetime() {
return createtime;
}
只需要在实体类的get方法上加上注解即可