Datumsformat Zuordnung zu JSON Jackson
Ich habe ein Datum-format kommt aus der API wie diese:
"start_time": "2015-10-1 3:00 PM GMT+1:00"
Ist YYYY-DD-MM HH:MM am/pm GMT-Zeitstempel.
Ich bin die Zuordnung dieses Wertes zu einer Date-variable in POJO. Offensichtlich zeigt seine Fehler bei der Konvertierung.
Ich würde gerne 2 Dinge wissen:
- Was ist die Formatierung, die ich brauche, zu verwenden, um die Durchführung der Konvertierung mit Jackson? Ist das Datum ein gutes Feld für diese?
- Im Allgemeinen ist es ein Prozess, der Variablen, bevor Sie zugeordnet, um Objekt, Mitglieder von Jackson? So etwas wie, das ändern des formats, Berechnungen, etc.
InformationsquelleAutor der Frage Kevin Rave | 2012-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Date
ist ein feines Feld für diese. Sie können das JSON-parse-in der Lage, ziemlich leicht durch die Verwendung vonObjectMapper.setDateFormat
:Ja. Sie haben ein paar Optionen, einschließlich der Implementierung einer benutzerdefinierten
JsonDeserializer
z.B. die ErweiterungJsonDeserializer<Date>
. Diese ist ein guter Anfang.InformationsquelleAutor der Antwort pb2q
Da Jackson v2.0, können Sie mit @JsonFormat Anmerkung direkt auf die member des Objekts;
InformationsquelleAutor der Antwort Olivier Lecrivain
Natürlich gibt es eine automatisierte Möglichkeit genannt Serialisierung und Deserialisierung und Sie können es definieren, die mit bestimmten Annotationen (@JsonSerialize,@JsonDeserialize) erwähnt pb2q als gut.
Können Sie sowohl von java.util.Date und java.util.Kalender
... und wahrscheinlich JodaTime als gut.
@JsonFormat Anmerkungen nicht für mich gearbeitet, wie ich wollte, (es hat verstellt die Zeitzone auf anderen Wert) bei der Deserialisierung (die Serialisierung arbeitete perfekt):
Müssen Sie verwenden Sie benutzerdefinierte und benutzerdefinierte serializer deserializer anstelle des @ - JsonFormat Anmerkung wenn Sie möchten vorhergesagte Ergebnis. Ich habe gefunden, echt gute Anleitung und Lösung hier http://www.baeldung.com/jackson-serialize-dates
Gibt es Beispiele für Datum Felder, aber ich brauchte für Kalender Felder aus, damit hier ist meine Umsetzung:
Den serializer Klasse:
Den deserializer Klasse:
und die Nutzung der oben genannten Klassen:
Mit dieser Umsetzung die Ausführung der Serialisierung und Deserialisierung nacheinander die Ergebnisse der origin-Wert.
Nur mit der @JsonFormat Anmerkung der Deserialisierung gibt unterschiedliche Ergebnis denke ich da an die Bibliothek interne timezone Standard setup, was du nicht ändern können, mit Beschriftungs-Parameter (das war meine Erfahrung mit der Jackson Bibliothek 2.5.3 und 2.6.3 version).
InformationsquelleAutor der Antwort Miklos Krivan
Gebäude auf @miklov-kriven ' s sehr hilfreiche Antwort, ich hoffe, diese beiden Punkte der überlegung hilfreich sein, jemand:
(1) ich finde es eine schöne Idee, um serializer de-serializer als statische innere Klassen in der gleichen Klasse. NB, mit ThreadLocal für thread-Sicherheit " = SimpleDateFormat.
(2) Als eine alternative zur Verwendung von @JsonSerialize und @JsonDeserialize Anmerkungen auf den einzelnen Schüler können Sie auch überschreiben Jackson die Standard-Serialisierung durch die Anwendung der benutzerdefinierten Serialisierung auf Anwendungsebene, ist, dass alle Gruppenmitglieder vom Typ Datum wird serialisiert werden von Jackson mit dieser benutzerdefinierten Serialisierung ohne explizite annotation auf jedem Feld. Wenn Sie mit Spring Boot zum Beispiel eine Möglichkeit, dies zu tun wäre wie folgt:
InformationsquelleAutor der Antwort Stuart
Wenn jemand Probleme hat mit einem benutzerdefinierten Datumsformat für java.sql.Datum, dies ist die einfachste Lösung:
(Diese Antwort hat mich gerettet eine Menge ärger: https://stackoverflow.com/a/35212795/3149048 )
Jackson nutzt die SqlDateSerializer standardmäßig für java.sql.Datum ist, aber derzeit ist dieser serializer nicht die dateformat-Rechnung finden Sie in dieser Ausgabe: https://github.com/FasterXML/jackson-databind/issues/1407 .
Die Problemumgehung ist, zu registrieren, eine andere serializer für java.sql.Datum wie gezeigt im code-Beispiel.
InformationsquelleAutor der Antwort Stephanie
Nur ein komplettes Beispiel für die spring boot Anwendung mit
RFC3339
datetime-formatInformationsquelleAutor der Antwort BaiJiFeiLong