Formatieren von JSON-Daten im Spring Boot

1. Übersicht

In diesem Tutorial zeigen wir, wie JSON-Datumsfelder in einer Spring Boot-Anwendung formatiert werden.

Wir werden verschiedene Möglichkeiten zum Formatieren von Datumsangaben mit Jackson untersuchen , das von Spring Boot als Standard-JSON-Prozessor verwendet wird.

2. Mit @JsonFormat auf einem Datum Feld

2.1. Format einstellen

Wir können die Annotation @JsonFormat verwenden, um ein bestimmtes Feld zu formatieren :

public class Contact { // other fields @JsonFormat(pattern="yyyy-MM-dd") private LocalDate birthday; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime lastUpdate; // standard getters and setters }

Im Feld " Geburtstag" verwenden wir ein Muster, das nur das Datum darstellt, während im Feld " Letztes Update" auch die Uhrzeit angegeben wird.

Wir haben die Java 8-Datumstypen verwendet, die für den Umgang mit zeitlichen Typen sehr praktisch sind. Wenn wir die Legacy-Typen wie java.util.Date verwenden müssen, können wir die Annotation natürlich auf die gleiche Weise verwenden:

public class ContactWithJavaUtilDate { // other fields @JsonFormat(pattern="yyyy-MM-dd") private Date birthday; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date lastUpdate; // standard getters and setters }

Schauen wir uns zum Schluss die Ausgabe an, die mit @JsonFormat mit dem angegebenen Datumsformat gerendert wurde :

{ "birthday": "2019-02-03", "lastUpdate": "2019-02-03 10:08:02" }

Wie wir sehen können, ist die Verwendung der Annotation @JsonFormat eine hervorragende Möglichkeit, ein bestimmtes Datumsfeld zu formatieren.

Wir sollten es jedoch nur verwenden, wenn wir eine bestimmte Formatierung für Felder benötigen. Wenn wir ein allgemeines Format für alle Daten in unserer Anwendung haben möchten, gibt es bessere Möglichkeiten, dies zu erreichen, wie wir später sehen werden.

2.2. Zeitzone einstellen

Wenn wir eine bestimmte Zeitzone verwenden müssen, können wir das Zeitzonenattribut von @ JsonFormat festlegen:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="Europe/Zagreb") private LocalDateTime lastUpdate;

Wir müssen es nicht verwenden, wenn ein Typ bereits die Zeitzone enthält, beispielsweise mit java.time.ZonedDatetime.

3. Konfigurieren des Standardformats

Und während @JsonFormat für sich genommen leistungsstark ist, kann uns die Hardcodierung des Formats und der Zeitzone auf die Straße bringen.

Wenn Sie ein Standardformat für alle Daten in unserer Anwendung konfigurieren möchten, können Sie es flexibler in application.properties konfigurieren :

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

Und wenn wir in unseren JSON-Daten eine bestimmte Zeitzone verwenden möchten, gibt es auch eine Eigenschaft dafür:

spring.jackson.time-zone=Europe/Zagreb

Obwohl das Festlegen des Standardformats wie dieses recht praktisch und unkompliziert ist, hat dieser Ansatz einen Nachteil. Leider funktioniert es nicht mit den Java 8- Datumstypen wie LocalDate und LocalDateTime. Wir können es nur zum Formatieren von Feldern vom Typ java.util.Date oder java.util.Calendar verwenden . Es gibt jedoch Hoffnung, wie wir bald sehen werden.

4. Anpassen von Jacksons ObjectMapper

Wenn wir also Java 8-Datumstypen verwenden und ein Standard-Datumsformat festlegen möchten, müssen wir uns mit dem Erstellen einer Jackson2ObjectMapperBuilderCustomizer- Bean befassen :

@Configuration public class ContactAppConfig { private static final String dateFormat = "yyyy-MM-dd"; private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { builder.simpleDateFormat(dateTimeFormat); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat))); }; } }

Das obige Beispiel zeigt, wie Sie ein Standardformat in unserer Anwendung konfigurieren. Wir müssen eine Bean definieren und ihre Anpassungsmethode überschreiben , um das gewünschte Format festzulegen .

Obwohl dieser Ansatz etwas umständlich aussieht, ist das Schöne daran, dass er sowohl für den Java 8- als auch für den Legacy-Datumstyp funktioniert.

5. Schlussfolgerung

In diesem Artikel haben wir verschiedene Möglichkeiten zum Formatieren von JSON-Daten in einer Spring Boot-Anwendung untersucht.

Wie immer finden wir den Quellcode für die Beispiele auf GitHub.