I have a question about Spring + Thymeleaf date format.
I have a simple entity with LocalDate date
field. I want to get this date from a user in form and save it to MySQL database.
I'm getting such an error:
Failed to convert property value of type java.lang.String to required type java.time.LocalDate for property date; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.time.LocalDate for value 2019-04-30; nested exception is java.time.format.DateTimeParseException: Text 2019-04-30 could not be parsed at index 2
My entity:
@Entity
@Table(name="game")
public class Game{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Transient
private User gameOwner;
private LocalDate date;
private LocalTime time;
//other fields
Thymeleaf view / form:
<form action="#" th:action="@{/games/addForm}" th:object="${gameForm}" method="post">
<p>Date: <input type="date" th:field="*{date}" /></p>
</form>
What's the reason for this problem? Maybe there is the other, better way to storage date?
I'm unable to reproduce the exact error, but I believe that adding a custom editor for the LocalDate class should fix this. Add this method to your controller:
It's also possible to add this globally, you'll have to create a
ControllerAdvice
class and add the method there instead.Problem solved.. I don't know why but changing my template to:
and adding
@DateTimeFormat(pattern = "yyyy-MM-dd")
to entity field solved the problem.add the following annotation above date.
put additional curly bracket around date. It will convert date into string
Thymeleaf provides an extra module for that: https://github.com/thymeleaf/thymeleaf-extras-java8time
Adding the following dependency (maven) should be enough: