Spring Boot 日期寫入異常

前端 Thymeleaf 傳回日期

但控制台報錯

Field error in object 'expense' on field 'date': rejected value [2021-03-28]; codes [typeMismatch.expense.date,typeMismatch.date,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [expense.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2021-03-28'; nested exception is java.lang.IllegalArgumentException]]

原因

前端傳的是 String,後端 entity 存 Date 造成不匹配。

解決

bean 的 date 屬性加上註解

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date date;

亦可使用以下註解

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)

將會以 ISO 8601 格式轉換日期