前提:昨天夫君十万火急的呼唤我,说他程序报错了。错误很简单,String类型 转换Date类型失败。关键的是,他看不到前台页面,也没办法打断点看数据情况。于是,我决定拯救万民于水火之中,总结一下 关于前后台数据传输时候String和Date的类型转换问题。

 简单写了一个小程序,使用的框架是SSM。

前端jsp 如下图:

关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

 

bean层 如下图所示:

关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

控制层 如下图所示:

关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

这样 运行整个项目,报错。因为String类型转换Date类型失败。

-----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------

目前有几种办法解决,我们一个一个说:

第一种:(从前台入手)

  前台给后台传日期类型的值,这个值的格式 大体有两种。一种是2018-02-01,另一种是2018/02/01。

  当传入的日期类型格式为2018-02-01时:

  关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

  运行结果为:(报错

  关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

  注: 造成错误400的原因--前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装。

 

  当传入的格式为2018/02/01时:

  关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

   运行结果为:(不报错

  关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

  注:显示出现中文乱码,因为没有在配置文件中,做处理。下一篇再讲解关于中文乱码的问题。

 

   关于第一种办法的小结:   

  1.当前端的日期按照2018/02/01的格式传输给后台时,程序可以将该字符串类型的日期自动转换成日期格式,存储到实体类中。

  2.当前端的日期按照2018-02-01的格式传输给后台时,程序无法转换,抛异常。一般情况下,使用日期控件传回来的日期格式为2018-02-01.

  -----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------

 第二种:(从控制层入手)

    个人比较推荐这种做法,在控制层 加入如下一个方法:

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

    代码如下:

        @InitBinder
        public void initBinder(ServletRequestDataBinder bin) {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             CustomDateEditor cust = new CustomDateEditor(sdf, true);
             bin.registerCustomEditor(Date.class, cust);
        }

     运行展示:

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

    注:这种办法 不仅使用于对象中的Date类型变量,同样使用于Date类型的对象。

    将controller做下更改:

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

    运行:

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

    结果:

    关于SpringMVC, bean对象中含有Date型变,改如何接收数据的问题。

 

   -----------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------

 

    其实,也可以用String类型的变量去接受这样一个数据,然后再将这个String类型转换成Date类型(通过SimpleDateFormat)。这个方法,就不举例了。

    希望越来越好。2月加油。~~~~

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
  • 2022-02-08
  • 2022-12-23
  • 2021-05-17
猜你喜欢
  • 2021-09-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2022-12-23
  • 2021-07-09
相关资源
相似解决方案