2016-12-07 110 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

相關問題