Tengo una pregunta sobre el formato de fecha Spring + Thymeleaf. Tengo una entidad simple con campo de LocalDate date . Quiero obtener esta fecha de un usuario en forma y guardarla en la base de datos MySQL. Estoy recibiendo un error de este tipo:
No se pudo convertir el valor de propiedad del tipo java.lang.String al tipo requerido java.time.LocalDate para la fecha de la propiedad; la excepción anidada es org.springframework.core.convert.ConversionFailedException: no se pudo convertir del tipo java.lang.String al tipo java.time.LocalDate para el valor 2019-04-30; la excepción anidada es java.time.format.DateTimeParseException: el texto 2019-04-30 no se pudo analizar en el índice 2
Mi entidad:
@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 fieldsVista / formulario de Thymeleaf:
<form action="#" th:action="@{/games/addForm}" th:object="${gameForm}" method="post"> <p>Date: <input type="date" th:field="*{date}" /></p> </form>¿Cuál es la razón de este problema? ¿Quizás hay otra forma mejor de almacenar la fecha?
Problema resuelto. No sé por qué, pero cambiando mi plantilla a:
<input type="date" th:value="*{date}" th:field="*{date}" /> y agregar @DateTimeFormat(pattern = "yyyy-MM-dd") al campo de entidad resolvió el problema.
import org.springframework.format.annotation.DateTimeFormat;agregue la siguiente anotación arriba de la fecha.
@DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate date;coloque un corchete adicional alrededor de la fecha. Convertirá la fecha en cadena.
<form action="#" th:action="@{/games/addForm}" th:object="${gameForm}" method="post"> <p>Date: <input type="date" th:field="*{{date}}" /></p> </form>Thymeleaf proporciona un módulo adicional para eso: https://github.com/thymeleaf/thymeleaf-extras-java8time
Agregar la siguiente dependencia (maven) debería ser suficiente:
<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> </dependency>