Pojo里面用的是java.util.Date;MYSQL里面用的是datetime。因为表单提交所有数据都是以字符串的形式传输(如果说错请大神指正),所以在后台接收到前台传来的日期字符串是要转换一下。
/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
这样就能正确插入数据库中。
但是当从数据库中取出来的时候,显示总是不正常的。控制台输出是这样子的:Mon Feb 13 18:10:00 CST 2017,浏览器输出是这样子的:1486980600000
通过
/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
转码时候,控制台输出是这样子的:2017-02-13 18:10:00,然而浏览器输出还是这样子的:1486980600000
因为整体的转换都是用阿里的fastjson,所以觉得它应该有专门针对Date类型的封装。果然,最后在Pojo的Date上加上@JSONField (format="yyyy-MM-dd HH:mm:ss") 注解,比如:
@JSONField (format="yyyy-MM-dd HH:mm:ss") //日期格式可以自己设定
private Date birthday;
前台显示了我想要的样子:2017-02-13 18:10:00。
还有很多的序列化我没看懂。有兴趣的可以看一下。
在往后的开发中,我还遇到了一个问题,就是springMVC前台传来的Date类型数据,由于与POJO里类型不匹配,所以页面直接报400。奇怪得不行。最后是直接对POJO的Date字段进行改造!具体改造如下:
public void setBegintime(begintime) {
this.begintime =begintime; } 改成: public void setBegintime(String begintime) {
if("".equels(begintime) || begintime == null) {this.begintime = "";
this.begintime = DateUtils.StrToDate(begintime);}}
参数类型改成String类型,并使用上面说的日期转换工具进行转换。改造setter方法只能解决后台接收参数400问题。但是前台读取数据库Date字段时,还是不能正常显示。
所以还需要改造一getter。也是直接对POJO的对应字段进行改造:
public Date getBegintime() { return begintime; }
改成:
public String getBegintime() {
if("".equels(begintime) || begintime == null) {
return "";return DateUtils.DateToStr(begintime);}}
返回值类型改成String类型,并使用Date工具类进行转换一下。完美解决。
个人觉得这虽然是破坏了POJO的结构,但是是从根本上解决了问题。当你尝试了各种注解的方式都不能解决的时候,可以用这个方法。