2016-12-07 112 views
0

我正在使用Thymeleaf和SpringBoot构建一个Web应用程序,我对这两个技术。Thymeleaf和SpringBoot - 未能将类型[java.lang.String]的属性值转换为prope所需的类型[java.util.Date]

在我的HTML文件中,有一个日期字段如下:

<input type="date" th:field="*{issueDate}" /> 

我的模型类有对应issueDate一个字段,如下所示:

@NotNull(message = "Cannot be empty") 
private Date issueDate; 

当我输入从日期UI,我在浏览器中看到以下例外情况:

Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property issueDate; 

从我的经验来看, UI将该属性作为字符串读取,但该模型期望发生错误的类型为Date。所以我需要将字符串转换为日期。但是,这应该在哪里完成?由于即使在调用模型中的setter方法之前也会发生错误。

任何帮助将不胜感激!提前致谢!

+0

请问您能否显示您的控制器和更多的html文件。 – Patrick

回答

1

在你的控制器:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true)); 
} 

WHERE “MM/DD/YYYY” 是您正在使用的日期格式。

+0

感谢您的回应,工作,所以不再抛出异常。但是,日期似乎没有被正确解析,错误的日期被存储在数据库中。我会检查一下。另一件我想知道的是,这个initBinder方法何时被调用?它是否在模型中的setter方法之前被调用? – Reshma

+0

是的,这是整个过程的一部分。它在填充模型时(在调用setter之前)在Spring中自动调用。至于解析日期,根据此规范,必须将日期更改为我提供的格式(“MM/dd/yyyy”)为您所使用的日期格式:https://docs.oracle.com/javase/ 8/docs/api/java/text/SimpleDateFormat.html – Metroids

+0

再次感谢,这很有帮助。我也想出了日期问题,不知道为什么,但日期格式需要yyyy-MM-dd,所以当我在initBinder中设置日期格式时,它工作正常。我在表单中使用html日期类型作为输入,所以当用户输入一个日期时,它被输入为dd-MM-yyyy。所以不知道为什么yyyy-MM-dd工作! – Reshma

相关问题