2016-12-07 27 views
0

ThymeleafとSpringBootを使用してWebアプリケーションを構築しています。技術。次のように私のHTMLファイルにThymeleafとSpringBoot - タイプ[java.lang.String]のプロパティ値を必須のタイプ[java.util.Date]に変換するのに失敗しました

は、日付フィールドがあります:

<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)); 
} 

"MM/DD/YYYY" は、使用している日付形式です。

+0

応答してくれてありがとうございました。そのため、例外はスローされなくなりました。しかし、日付は正しく解析されていないようですが、間違った日付がDBに格納されます。私はそれを確認します。私が知りたいことは、いつこのinitBinderメソッドが呼び出されるのかということでした。それはモデルのセッターメソッドの前に呼び出されますか? – Reshma

+0

はい、それはすべてプロセスの一部です。これは、モデルを読み込む前に(setterが呼び出される前に)春に自動的に呼び出されます。日付の構文解析に関しては、使用している日付形式(「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

関連する問題