前提:昨天夫君十万火急的呼唤我,说他程序报错了。错误很简单,String类型 转换Date类型失败。关键的是,他看不到前台页面,也没办法打断点看数据情况。于是,我决定拯救万民于水火之中,总结一下 关于前后台数据传输时候String和Date的类型转换问题。
简单写了一个小程序,使用的框架是SSM。
前端jsp 如下图:
bean层 如下图所示:
控制层 如下图所示:
这样 运行整个项目,报错。因为String类型转换Date类型失败。
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
目前有几种办法解决,我们一个一个说:
第一种:(从前台入手)
前台给后台传日期类型的值,这个值的格式 大体有两种。一种是2018-02-01,另一种是2018/02/01。
当传入的日期类型格式为2018-02-01时:
运行结果为:(报错)
注: 造成错误400的原因--前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装。
当传入的格式为2018/02/01时:
运行结果为:(不报错)
注:显示出现中文乱码,因为没有在配置文件中,做处理。下一篇再讲解关于中文乱码的问题。
关于第一种办法的小结:
1.当前端的日期按照2018/02/01的格式传输给后台时,程序可以将该字符串类型的日期自动转换成日期格式,存储到实体类中。
2.当前端的日期按照2018-02-01的格式传输给后台时,程序无法转换,抛异常。一般情况下,使用日期控件传回来的日期格式为2018-02-01.
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
第二种:(从控制层入手)
个人比较推荐这种做法,在控制层 加入如下一个方法:
代码如下:
@InitBinder
public void initBinder(ServletRequestDataBinder bin) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
CustomDateEditor cust = new CustomDateEditor(sdf, true);
bin.registerCustomEditor(Date.class, cust);
}
运行展示:
注:这种办法 不仅使用于对象中的Date类型变量,同样使用于Date类型的对象。
将controller做下更改:
运行:
结果:
-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------
其实,也可以用String类型的变量去接受这样一个数据,然后再将这个String类型转换成Date类型(通过SimpleDateFormat)。这个方法,就不举例了。
希望越来越好。2月加油。~~~~