Leitfaden für @JsonFormat in Jackson

1. Übersicht

In diesem Artikel versuchen wir zu verstehen, wie @JsonFormat in Jackson verwendet wird. Es handelt sich um eine Jackson-Annotation, mit der angegeben wird, wie Felder und / oder Eigenschaften für die JSON-Ausgabe formatiert werden sollen.

Insbesondere ermöglicht diese Anmerkung angeben , wie Sie zu formatieren Datum und Kalender - Werte nach einem Simple Format.

2. Maven-Abhängigkeit

@JsonFormat ist im jackson-database-Paket definiert, daher benötigen wir die folgende Maven-Abhängigkeit:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Erste Schritte

3.1. Verwenden des Standardformats

Zunächst werden die Konzepte zur Verwendung der Annotation @JsonFormat mit einer Klasse demonstriert, die einen Benutzer darstellt.

Da wir versuchen, die Details der Anmerkung zu erläutern, wird das Benutzerobjekt auf Anfrage erstellt (und nicht gespeichert oder aus einer Datenbank geladen) und in JSON serialisiert:

public class User { private String firstName; private String lastName; private Date createdDate = new Date(); // standard constructor, setters and getters } 

Das Erstellen und Ausführen dieses Codebeispiels gibt die folgende Ausgabe zurück:

{"firstName":"John","lastName":"Smith","createdDate":1482047026009}

Wie Sie sehen können, die CreatedDate wird Feld als die Anzahl der Sekunden seit Epoche gezeigt , die das Standardformat für verwendetes Datum Felder aus .

3.2. Verwenden der Anmerkung auf einem Getter

Verwenden Sie jetzt @JsonFormat , um das Format anzugeben, in dem das Feld createdDate serialisiert werden soll. Hier ist die Benutzerklasse, die für diese Änderung aktualisiert wurde. Das Feld createdDate wurde wie gezeigt mit Anmerkungen versehen, um das Datumsformat anzugeben.

Das Datenformat für das verwendete Muster Argument wird durch angegeben Simple :

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ") private Date createdDate;

Mit dieser Änderung erstellen wir das Projekt erneut und führen es aus. Die Ausgabe wird unten gezeigt:

{"firstName":"John","lastName":"Smith","createdDate":"[email protected]:53:34.740+0000"}

Wie Sie sehen können, die CreatedDate hat Feld wurde mit dem angegebenen Format Simple Format mit der @JsonFormat Anmerkung.

Das obige Beispiel zeigt die Verwendung der Anmerkung in einem Feld. Es kann auch in einer Getter-Methode (einer Eigenschaft) wie folgt verwendet werden.

Beispielsweise verfügen Sie möglicherweise über eine Eigenschaft, die beim Aufruf berechnet wird. In einem solchen Fall können Sie die Annotation für die Getter-Methode verwenden. Beachten Sie, dass das Muster ebenfalls geändert wurde, um nur den Datumsteil des Augenblicks zurückzugeben:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") public Date getCurrentDate() { return new Date(); }

Die resultierende Ausgabe ist wie folgt:

{ ... , "currentDate":"2016-12-18", ...}

3.3. Festlegen des Gebietsschemas

Neben der Angabe des Datumsformats können Sie auch das Gebietsschema angeben, das für die Serialisierung verwendet werden soll. Wenn Sie diesen Parameter nicht angeben, wird die Serialisierung mit dem Standardgebietsschema durchgeführt:

@JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ", locale = "en_GB") public Date getCurrentDate() { return new Date(); }

3.4. Festlegen der Form

Mit @JsonFormat mit Form - Set JsonFormat.Shape.NUMBER Ergebnisse in der Standardausgabe für Datum Typen - wie die Anzahl der Sekunden seit der Epoche . Der Parameter Muster ist nicht auf diesen Fall anwendbar und wird ignoriert:

@JsonFormat(shape = JsonFormat.Shape.NUMBER) public Date getDateNum() { return new Date(); }

Die Ausgabe ist wie folgt:

{ ..., "dateNum":1482054723876 }

4. Fazit

Abschließend @JsonFormat wird verwendet , um das Ausgabeformat zu steuern , Datum und Kalender - Typen , wie oben gezeigt.

Der oben gezeigte Beispielcode ist auf GitHub verfügbar.