错误:org.springframework.core.convert.ConversionFailedException。如何解决?

时间:2016-03-24 09:46:57

标签: spring hibernate jetty

我的项目有问题。当我总结[start_date_time] => Cake\I18n\Time Object ( [time] => 2016-02-01T01:00:00+00:00 [timezone] => UTC [fixedNowTime] => ) 以保存UserForm时,会出现以下错误:

  

无法将java.lang.String类型的属性值转换为必需值   输入属性birthDay的java.util.Date;嵌套异常是   org.springframework.core.convert.ConversionFailedException:失败   从类型java.lang.String转换为类型java.util.Date类型   2016年3月26日;嵌套异常是java.lang.IllegalArgumentException

此处归档UserForm.jsp

User

此处提交User.java文件

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>         
<html>
    <head>
        <title>Add New User</title>
    </head>
<body>
<h2>Please Input User Information</h2>

    <form:form method="POST" modelAttribute="User" action="/user/save">
        <table>
            <tr>
                <td><form:label path="userName">UserName</form:label></td>
                <td><form:input path="userName"/></td>
                <td><form:errors path="userName" /></td>
            </tr>
            <tr>
                <td><form:label path="passWord">Password</form:label></td>
                <td><form:input path="passWord"/></td>
                <td><form:errors path="passWord" /></td>
            </tr>


            <tr>
                <td><form:label path="birthDay">Birthday</form:label></td>
                <td><form:input path="birthDay" type = "date"/> </td>

                <td><form:errors path="birthDay"/> </td>
            </tr>

            <tr>
                <td><form:label path="age">Age</form:label>
                <td><form:input path="age" type = "number"/> </td>
                <td><form:errors path="age"></form:errors> </td>
            </tr>

            <tr> 
                <td><form:label path="gender">Gender</form:label></td>
                <td><form:select path="gender">
                        <form:options items="${allgender}" itemLabel="gender"/>

                    </form:select></td>
                <td><form:errors path="gender"></form:errors></td>
            </tr>





            <tr><td colspan="3"><input type="submit" value="Submit" /></td></tr>
        </table>
    </form:form> 

</body> 
</html>

1 个答案:

答案 0 :(得分:1)

Spring无法将请求参数字符串转换为包含java.util.Date对象的日期(和时间)信息的对象。

Becaue Spring不知道如何将日期字符串转换为Date对象,因为日期格式可能因区域设置而异

Spring已CustomDateEditor为您转换此内容。您只需要注册日期格式。

您应该使用@InitBinder

注册日期格式
 @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yourdateformat"); //yyyy-MM-dd'T'HH:mm:ssZ example
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }