转载请注明出处:https://blog.youkuaiyun.com/weixin_41459547/article/details/88845278
若有不对之处,感谢各位批评指导,希望大家一起讨论学习。
导读:第一部分为异常详情,第二部分为解决方法,若不想查看异常信息,可直接查看解决方法解决问题,
本文的背景:前端使用html的date控件,在后端使用Date类型字段接收时,发出错误,而String类型字段接收可以实现。具体实现方法为——通过SimpleDateFormat的parse方法将String类型转换为Date类型。
异常详情:
因异常代码量过长,所以放在文末,这里先贴出报错的那一整行的信息:
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type [java.lang.String] to required type [java.util.Date]; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2000-09-24'; nested exception is java.lang.IllegalArgumentException
造成错误的原因在异常中已经说出来了,就是无法用Date类型数据接收String类型的数据,即无法发生转换,错误关键语句如下:
Failed to convert from type [java.lang.String] to type [java.util.Date]
然后,在发生类型转换的位置看下代码:
前端页面接收的部分,如下图,这里我们使用的类型type=date,所以我们接收的是一个date类型的数据:
<tr>
<td>注册时间</td>
<td><input id="jointimeTemp" name="jointimeTemp" type="date" value="2000-09-24"/></td>
</tr>
在后台,我的jointimeTemp字段是Date类型的数据,所以前端才设置为type=date类型。
然后我们在后台接收的方法头部分,我们接收jointimeTemp的类型为Date类型,想着跟前端部分的date类型对应
@RequestMapping("/managerAddStudent.action")
public @ResponseBody String managerAddStudent(Student student,Date jointimeTemp) {
/*
省略具体代码及返回值
*/
}
于是,这样配置之后,就爆出了Failed to convert from type [java.lang.String] to type [java.util.Date]的异常。
解决方法:
使用后端部分使用String类型字段接收前端的date类型的数据,代码如下;
@RequestMapping("/managerAddStudent.action")
public @ResponseBody String managerAddStudent(Student student,String jointimeTemp) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
Date date = sdf.parse(jointimeTemp);
//SimpleDateFormat的parse方法是返回java.util.Date类型的数据
}
这样,就实现了使用html的date控件,然后在后端通过接收String类型字段,通过SimpleDateFormat的parse方法将String类型转换为Date类型。