Wie bringe ich Jackson dazu, mein Joda DateTime-Objekt nach einem einfachen Muster (wie "TT-MM-JJJJ") zu serialisieren?
Ich habe es versucht:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Ich habe auch versucht:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Vielen Dank!
Antworten:
Dies ist mit Jackson 2.0 und dem Joda-Modul sehr einfach geworden.
Maven-Abhängigkeit:
Code und Dokumentation: https://github.com/FasterXML/jackson-datatype-joda
Binärdateien: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
quelle
In dem Objekt, das Sie zuordnen:
In CustomDateSerializer:
quelle
org.codehaus.jackson
anstelle von verwendencom.fasterxml.jackson.core
. Die Verwendung des zweiten Pakets hat bei mir nicht funktioniert. Tatsächlich hat meine Jersey-App die@JsonSerialized
Anmerkung nicht einmal respektiert .Wie @Kimble bereits sagte, ist die Verwendung der Standardformatierung mit Jackson 2 sehr einfach. Registrieren
JodaModule
Sie sich einfach auf IhremObjectMapper
.Für die benutzerdefinierte Serialisierung / De-Serialisierung von
DateTime
müssen Sie Ihre eigenen implementierenStdScalarSerializer
undStdScalarDeserializer
; es ist ziemlich verworren, aber trotzdem.Hier ist beispielsweise ein
DateTime
Serializer, derISODateFormat
die Zeitzone UTC verwendet:Und der entsprechende De-Serializer:
Binden Sie diese dann mit einem Modul zusammen:
Dann registrieren Sie das Modul auf Ihrem
ObjectMapper
:quelle
Die einfache Lösung
Ich bin auf ein ähnliches Problem gestoßen und meine Lösung ist viel klarer als oben.
Ich habe das Muster einfach in
@JsonFormat
Anmerkungen verwendetGrundsätzlich hat meine Klasse ein
DateTime
Feld, also setze ich eine Anmerkung um den Getter:Ich serialisiere die Klasse mit
ObjectMapper
Wir verwenden Jackson 2.5.4
quelle
https://stackoverflow.com/a/10835114/1113510
Obwohl Sie für jedes Datumsfeld eine Anmerkung einfügen können, ist es besser, eine globale Konfiguration für Ihren Objekt-Mapper vorzunehmen. Wenn Sie Jackson verwenden, können Sie Ihre Feder wie folgt konfigurieren:
Für CustomObjectMapper:
Natürlich kann SimpleDateFormat jedes Format verwenden, das Sie benötigen.
quelle
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
habe den Trick für mich gemacht, thxWährenddessen registriert Jackson das Joda-Modul automatisch, wenn sich das JodaModule im Klassenpfad befindet. Ich habe gerade jackson-datatype-joda zu Maven hinzugefügt und es hat sofort funktioniert.
JSON-Ausgabe:
quelle
Für diejenigen mit Spring Boot müssen Sie das Modul zu Ihrem Kontext hinzufügen und es wird wie folgt zu Ihrer Konfiguration hinzugefügt.
Und wenn Sie das neue Java8-Zeitmodul jsr-310 verwenden möchten.
quelle
Es scheint, dass es für Jackson 1.9.12 standardmäßig keine solche Möglichkeit gibt, weil:
Diese Klasse serialisiert Daten mit der toString () -Methode von Joda DateTime.
Der von Rusty Kuntz vorgeschlagene Ansatz funktioniert perfekt für meinen Fall.
quelle
Ich benutze Java 8 und das hat bei mir funktioniert.
Fügen Sie die Abhängigkeit von hinzu
pom.xml
und füge JodaModule zu deinem hinzu
ObjectMapper
quelle