首先说明:以版本为Spring 4.3.0为测试对象; 开启
测试场景一:请求中含有date属性,该类型为日期类型,SpringMvc采用@RequestParam来接受作为方法入参。
代码很简单,第一反应是不能将字符串的date属性赋给d;
先尝试输入当前日期 2019-02-21 20:30 并提交,当然现在大多都是前端日期控件来选择日期并按照一定类型提交到后台的;
查看报错信息: 没能够将字符串类型转换需要的日期类型
其实,不是这样的,当输入日期为 2018/02/21 20:36:00 这样的,你会发现又可以将字符串转为日期类型
原因我DEBUG简单分析如下:因为@RequestParam注解决定了使用 RequestParamMethodArgumentResolver这个参数解析器,mvc-annotation注册的参数类型转换器 并没有
String—>Date类型的转换器 , 但是用到了ObjectToObjectConvert这个转换器;下图贴一下其 类型转换的convert 方法,就是尝试去寻找 目标类 Date 构造方法
即目标类构造方法需要唯一含有String类型的构造方法,然后实例化 该目标类, 没找到就会抛出异常;
因为Date有个虽然过时、但是确实是String类的构造方法:至于parse方法就是将String字符串转为long类型,支持格式有常见的几种:
2018/02/21 20:36:00 或者 2019/02/21 或者 02/21/2019 20:58:00
具体看是否支