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

前提:昨天夫君十万火急的呼唤我,说他程序报错了。错误很简单,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月加油。~~~~

转载于:https://www.cnblogs.com/lyy9902/p/8385369.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值