web-dev-qa-db-fra.com

Existe-t-il un module de type de données jackson pour JDK8 Java.time?

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.

27
Brett Ryan

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.

JavaTimeModule Source sur GitHub

JavaTimeModule Usage

62
PhilippS

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

14
StaxMan

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());
4
Jonas Flesch

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 
2
davidxxx

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 .

2
Brett Ryan

Vous devriez pouvoir utiliser

ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
0
Kalpesh Soni