Comment faire pour que Jackson sérialise mon objet Joda DateTime selon un modèle simple (comme "jj-MM-aaaa")?
J'ai essayé:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
J'ai aussi essayé:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Merci!
Réponses:
C'est devenu très simple avec Jackson 2.0 et le module Joda.
Dépendance Maven:
Code et documentation: https://github.com/FasterXML/jackson-datatype-joda
Binaires: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
la source
Dans l'objet que vous mappez:
Dans CustomDateSerializer:
la source
org.codehaus.jackson
plutôt quecom.fasterxml.jackson.core
. L'utilisation du deuxième package n'a pas fonctionné pour moi. En fait, mon application Jersey n'a même pas respecté l'@JsonSerialized
annotation.Comme @Kimble l'a dit, avec Jackson 2, l'utilisation du formatage par défaut est très simple; inscrivez-
JodaModule
vous simplement sur votreObjectMapper
.Pour une sérialisation / désérialisation personnalisée de
DateTime
, vous devez implémenter votre propreStdScalarSerializer
etStdScalarDeserializer
; c'est assez compliqué, mais de toute façon.Par exemple, voici un
DateTime
sérialiseur qui utilise leISODateFormat
avec le fuseau horaire UTC:Et le désérialiseur correspondant:
Ensuite, attachez-les avec un module:
Enregistrez ensuite le module sur votre
ObjectMapper
:la source
La solution simple
J'ai rencontré un problème similaire et ma solution est beaucoup plus claire que ci-dessus.
J'ai simplement utilisé le motif en
@JsonFormat
annotationEn gros, ma classe a un
DateTime
champ, donc j'ai mis une annotation autour du getter:Je sérialise la classe avec
ObjectMapper
Nous utilisons Jackson 2.5.4
la source
https://stackoverflow.com/a/10835114/1113510
Bien que vous puissiez mettre une annotation pour chaque champ de date, il est préférable de faire une configuration globale pour votre mappeur d'objets. Si vous utilisez jackson, vous pouvez configurer votre ressort comme suit:
Pour CustomObjectMapper:
Bien sûr, SimpleDateFormat peut utiliser n'importe quel format dont vous avez besoin.
la source
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
a fait l'affaire pour moi,Pendant ce temps, Jackson enregistre automatiquement le module Joda lorsque le JodaModule est dans classpath. Je viens d'ajouter jackson-datatype-joda à Maven et cela a fonctionné instantanément.
Sortie JSON:
la source
Pour ceux qui ont Spring Boot, vous devez ajouter le module à votre contexte et il sera ajouté à votre configuration comme ceci.
Et si vous souhaitez utiliser le nouveau module de temps java8 jsr-310.
la source
Il semble que pour Jackson 1.9.12, une telle possibilité n'existe pas par défaut, à cause de:
Cette classe sérialise les données à l'aide de la méthode toString () de Joda DateTime.
L'approche proposée par Rusty Kuntz fonctionne parfaitement pour mon cas.
la source
J'utilise Java 8 et cela a fonctionné pour moi.
Ajouter la dépendance sur
pom.xml
et ajoutez JodaModule sur votre
ObjectMapper
la source