Serialisierung von Map & lt; Date, String & gt; mit Jackson
Ich serialisieren möchten eine Karte mit Jackson.
Das Datum, die serialisiert werden sollen, wie ein Zeitstempel, wie alle meine anderen Termine.
Den folgenden code rendert die Schlüssel in der form "Tue Mar 11 00:00:00 CET 1952" (das ist das Datum.toString()) statt dem Zeitstempel.
Map<Date, String> myMap = new HashMap<Date, String>();
...
ObjectMapper.writeValue(myMap)
Ich nehme an, dies ist wegen der type erasure und jackson nicht weiß, zur Laufzeit, dass der Schlüssel ist ein Datum. Aber ich habe nicht einen Weg finden, um pass ein TypeReference zu jeder Methode writeValue.
Gibt es eine einfache Möglichkeit zum erreichen der von mir gewünschten Verhalten oder sind alle Schlüssel immer so dargestellt, als Zeichenfolgen von jackson?
Dank für jeden Hinweis.
InformationsquelleAutor der Frage Florian Gutmann | 2011-07-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Standard-Karte-Taste serializer ist
StdKeySerializer
und es einfach tut.Nutzen Sie die SimpleModule Funktionund geben Sie einen benutzerdefinierten Schlüssel an, serializer, mit der
addKeySerializer
Methode.Und hier ist, wie das getan werden könnte.
Updates für die neuesten Jackson (2.0.4):
InformationsquelleAutor der Antwort Programmer Bruce
Als üblich, Bruce ' s Antwort ist genau auf den Punkt.
Ein zusätzlicher Gedanke ist, dass es da eine Globale Einstellung, die für die Serialisierung von Datum-Werte als Zeitstempel (SerializationConfig.Funktion.WRITE_DATES_AS_TIMESTAMPS), vielleicht sollte hier gelten, wie gut. Und/oder mindestens verwenden Sie die standard-ISO-8601-format für text.
Das wichtigste praktische Problem ist, dass der rückwärts-Kompatibilität, aber ich bezweifle, dass die derzeitige Verwendung von plain toString() ist sehr nützlich, da es weder effizient noch praktisch (wieder den Wert Lesen).
Also, wenn Sie wollen, möchten Sie vielleicht, um die Datei eine feature-Anfrage; das klingt wie sub-optimale Handhabung von Karte, Schlüssel durch Jackson.
InformationsquelleAutor der Antwort StaxMan
Da Jackson 2.0 (vielleicht 1.9 auch)
WRITE_DATE_KEYS_AS_TIMESTAMPS
können verwendet werden, um dies zu ändern, mit der bestimmte Verhaltensweisen.Beispiel für die Verwendung von
ObjectMapper
:und für
ObjectWriter
:InformationsquelleAutor der Antwort Roben