Ich versuche, ein benutzerdefiniertes Datumsformat in der Gson-Ausgabe zu haben, aber es .setDateFormat(DateFormat.FULL)
scheint nicht zu funktionieren und es ist dasselbe mit .registerTypeAdapter(Date.class, new DateSerializer())
.
Es ist, als ob Gson sich nicht um das Objekt "Datum" kümmert und es auf seine Weise druckt.
Wie kann ich das ändern?
Vielen Dank
BEARBEITEN:
@Entity
public class AdviceSheet {
public Date lastModif;
[...]
}
public void method {
Gson gson = new GsonBuilder().setDateFormat(DateFormat.LONG).create();
System.out.println(gson.toJson(adviceSheet);
}
Ich benutze immer java.util.Date
; setDateFormat()
funktioniert nicht :(
Antworten:
Es scheint, dass Sie Formate für Datum und Uhrzeit definieren oder eine stringbasierte Formatierung verwenden müssen. Beispielsweise:
oder mit java.text.DateFormat
oder mach es mit Serialisierern:
Ich glaube, dass Formatierer keine Zeitstempel erzeugen können, aber dieses Serializer / Deserializer-Paar scheint zu funktionieren
Wenn Sie Java 8 oder höher verwenden, sollten Sie die oben genannten Serializer / Deserializer wie folgt verwenden:
quelle
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
funktioniert.Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
funktioniertDas obige Format scheint mir besser zu sein, da es eine Präzision von bis zu Millis aufweist.
quelle
Wie ML betonte, arbeitet JsonSerializer hier. Wenn Sie jedoch Datenbankentitäten formatieren, registrieren Sie Ihren Serializer mit java.sql.Date. Deserializer wird nicht benötigt.
Dieser Fehlerbericht könnte verwandt sein: http://code.google.com/p/google-gson/issues/detail?id=230 . Ich benutze allerdings Version 1.7.2.
quelle
Wenn Sie innere Klassen hassen, können Sie durch die Nutzung der funktionalen Schnittstelle weniger Code in Java 8 mit einem Lambda-Ausdruck schreiben .
quelle
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context) -> new Date(json.getAsLong())).create();
Das wird überhaupt nicht funktionieren. In JSON gibt es keinen Datumstyp. Ich würde empfehlen, hin und her auf ISO8601 zu serialisieren (für Formatunabhängigkeit und JS-Kompatibilität). Beachten Sie, dass Sie wissen müssen, welche Felder Datumsangaben enthalten.
quelle
Sie können Ihr Format
Gson gson = builder.setDateFormat("yyyy-MM-dd").create();
in dieser Methode angeben , anstattyyyy-MM-dd
andere Formate zu verwendenquelle
Dies ist ein Fehler . Derzeit müssen Sie entweder auch eine festlegen
timeStyle
oder eine der in den anderen Antworten beschriebenen Alternativen verwenden.quelle
Ich bin auf Gson 2.8.6 und habe diesen Fehler heute entdeckt.
Mein Ansatz ermöglicht es allen bestehenden Kunden (Mobile / Web / etc), weiterhin so zu funktionieren, wie sie waren, fügt jedoch eine gewisse Handhabung für diejenigen hinzu, die 24-Stunden-Formate verwenden, und ermöglicht auch Millis.
Ich habe die Serialisierung beibehalten, da alle Clients das Standard-JSON-Datumsformat verstehen.
Normalerweise halte ich es nicht für eine gute Praxis, Try / Catch-Blöcke zu verwenden, aber dies sollte ein ziemlich seltener Fall sein.
quelle