Je recherche un module pour les nouvelles classes JDK8 Java.time . J'ai parcouru la Liste des projets FasterXML GitHub et je n'en ai actuellement trouvé aucune.
Si je comprends bien, Jackson est toujours en cours de compilation avec JDK6 et ne peut donc pas utiliser ces classes directement et doit avoir ceci construit comme un module séparé, comme cela était requis avec Joda.
Cela ne me dérange pas de démarrer le projet, bien que je cherche à voir si d'autres efforts étaient déjà en cours.
Comme déjà mentionné, Jackson-Datatype-JSR31 fournit un support pour Java 8 Time.
Depuis Jackson 2.6.0, le "vieux" JSR310Module est obsolète. Il est remplacé par JavaTimeModule. La dépendance Maven est la même (vous pouvez trouver la version actuelle dans Maven Central ):
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.0</version>
</dependency>
Vous devez enregistrer le module comme ceci:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Notez qu'à partir de 2.6, ce module ne prend pas en charge l'enregistrement automatique, en raison de l'existence d'une version héritée, JSR310Module. La version héritée a la même fonctionnalité, mais une configuration par défaut légèrement différente: voir com.fasterxml.jackson.datatype.jsr310 . JSR310Module pour plus de détails.
La liste la plus complète des modules de types de données se trouve sur la page "portail" de Jackson sur Github:
https://github.com/FasterXML/jackson
qui répertorie "JSR-310: prise en charge de" Java 8 Dates ". La dénomination est peu opaque, mais elle fait référence au processus de normalisation, via JSR qui devrait être finalisé pour produire la nouvelle API Java8 Date (si elle n'est pas déjà définitive; processus a pris un certain temps).
Le lien direct est: https://github.com/FasterXML/jackson-datatype-jsr31
Il vous suffit d'importer le module jsr31 .
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.5.0</version>
</dependency>
Si scan automatique du module n'est pas activé dans votre projet, vous devrez l'enregistrer:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
Si vous utilisez Spring Boot 2 et dépend du spring-boot-starter-web
starter, vous auriez comme dépendances à la fois: le déprécié (jackson-datatype-jsr310) et le réel (jackson-datatype-jdk8).
[INFO] + - org.springframework.boot: spring-boot-starter-web: jar: 2.0.0.M3: compiler [INFO] | + - org.springframework.boot: spring-boot-starter-json: jar: 2.0.0.M3: compiler [INFO] | | + - com.fasterxml.jackson.datatype: jackson-datatype-jdk8: jar: 2.9.0.pr4: compiler [INFO] | | + - com.fasterxml.jackson.datatype: jackson-datatype-jsr310: jar: 2.9.0.pr4: compiler
Mon mauvais, je cherchais un jackson-datatype-jdk8
comme pour jackson-datatype-jdk7 , mais le projet a en fait été créé sous le nom JSR jackson-datatype-jsr31 .
Vous devriez pouvoir utiliser
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();