2017-10-10 3 views
0

Pouvez-vous utiliser LocalDateTime avec un projet Spring Boot et si oui, comment?Projet de démarrage de Spring avec LocalDateTime

J'ai essayé de suivre cette post et a ajouté la ligne et de la dépendance nécessaire à application.properties mais je reçois encore:

java.io.StreamCorruptedException: invalid stream header: 32303137 

Lorsque les données persistant ou d'essayer de voir les données existantes avec des dates créées à l'aide Java.util .Rendez-vous amoureux.

+0

Vous pouvez utiliser les types 'java.time' avec n'importe quel fournisseur JPA qui prend en charge ces types, et puisque ces types sont standard dans JPA 2.2, tout fournisseur JPA 2.2 conforme – DN1

+0

Spring-boot est une structure préconisée. Si vous savez comment obtenir Springboot sur JPA2.2, s'il vous plaît faites le moi savoir. –

+0

Essayez de supprimer @Temporal (TemporalType.TIMESTAMP) de vos champs d'entité. – Justas

Répondre

1

Ok, donc je l'ai eu pour aller. Il a fallu plusieurs changements pour que les deux Hibernate & Springboot & Thymeleaf fonctionnent tous avec Java 8 - LocalDateTime.

Hibernate

Ajouter dépendances:

compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.4.0") 
compile group: 'org.hibernate', name: 'hibernate-java8' 

Ajouter ce qui suit à application.properties:

spring.jackson.serialization.write_dates_as_timestamps=false 

Les annotations sur mes entités ressemblent:

@JsonFormat(pattern="yyyy-MM-dd") 
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME) 
private LocalDateTime somedate; 

Bien que cela ne semble pas être strictement nécessaire.

thymeleaf

ajouter la dépendance:

compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time', version: '3.0.0.RELEASE' 

Assurez-vous qu'il correspond à votre version serpolet.

Dans n'importe quel HTML dans le projet, vos champs de dates devraient maintenant utiliser #temporals au lieu de #dates. à savoir:

<td th:text="${#temporals.format(object.somedate, 'yyyy-MM-dd HH:mm')}">12/12/2018</td> 

botte printemps

Dans ma classe Application.java j'ai ajouté:

@Bean 
public Java8TimeDialect java8TimeDialect() { 
    return new Java8TimeDialect(); 
} 

Les ressources suivantes sont inestimables:

http://blog.codeleak.pl/2015/11/how-to-java-8-date-time-with-thymeleaf.html#comment-form (thymeleaf/Springboot)

https://www.thoughts-on-java.org/hibernate-5-date-and-time/ (Hibernate)

+0

Pour une valeur de date uniquement sans heure du jour, utilisez 'LocalDate' plutôt que' LocalDateTime'. –

+1

Même si je ne connais pas vos intentions plus larges, laissez-moi vous avertir de l'utilisation de 'LocalDateTime' pour les valeurs date-heure. Cette classe manque volontairement de concept de fuseau horaire ou de décalage par rapport à l'UTC. Donc cette classe ne représente * pas * un moment sur la ligne de temps, seulement une gamme de moments potentiels.Si vous voulez représenter un moment spécifique sur la timeline, utilisez les autres classes java.time: 'Instant',' OffsetDateTime' ou 'ZonedDateTime'. –

+0

votre réponse mentionne hibernate mais répertorie les dépendances jackson sous cela. Peut-être qu'il vous manque quelque chose en rapport avec hiberner dans votre réponse? –