Heim > Java > javaLernprogramm > Wie formatiere ich ZonedDateTime in der Spring Data JPA JSON-Serialisierung auf ISO 8601?

Wie formatiere ich ZonedDateTime in der Spring Data JPA JSON-Serialisierung auf ISO 8601?

DDD
Freigeben: 2024-12-13 18:16:18
Original
803 Leute haben es durchsucht

How to Format ZonedDateTime to ISO 8601 in Spring Data JPA JSON Serialization?

Spring Data JPA: Formatieren von ZonedDateTime in der JSON-Serialisierung

Spring Data JPA unterstützt die Zuordnung von Java 8-Datums- und Zeittypen zu Datenbankspalten. Das standardmäßige JSON-Serialisierungsformat für ZonedDateTime kann jedoch zu einer ausführlichen Ausgabe führen. In diesem Artikel wird erläutert, wie ZonedDateTime während der JSON-Serialisierung in das ISO-Format formatiert wird.

Problemstellung

Trotz Verwendung der @DateTimeFormat-Annotation mit iso = DateTimeFormat.ISO.DATE_TIME führt die JSON-Serialisierung von ZonedDateTime immer noch zu Ergebnissen ein detailliertes Objekt. Das Ziel besteht darin, ZonedDateTime in ein prägnanteres ISO-Format zu formatieren.

Lösung

Das JSON-Serialisierungsproblem wird wahrscheinlich von Jackson verursacht, der die JSON-Serialisierung in Spring Data JPA übernimmt. Um dieses Problem zu beheben, muss Jacksons Modul für die Java 8-API für Datum und Uhrzeit hinzugefügt werden.

Abhängigkeitserweiterung

Fügen Sie die folgende Abhängigkeit zu Ihrer pom.xml hinzu:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>
Nach dem Login kopieren

Modulregistrierung

Registrieren Sie nach dem Hinzufügen der Abhängigkeit das JavaTimeModule bei Jackson:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
Nach dem Login kopieren

Anpassung des Formatierers

Die Annotation @JsonFormat auf der Getter-Methode ZonedDateTime kann verwendet werden, um das Datumsformat während der Serialisierung anzupassen. Zum Beispiel:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}
Nach dem Login kopieren

Dadurch wird die ZonedDateTime im ISO-Format formatiert: yyyy-MM-dd'T'HH:mm:ss.SSSZ.

Beispiel

Das folgende Beispiel demonstriert die Verwendung des JavaTimeModule und die Formatanpassung:

public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    ZonedDateTime time = ZonedDateTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    public ZonedDateTime getTime() {
        return time;
    }
}
Nach dem Login kopieren

Die Ausgabe dieses Beispiels wäre:

{"time":"2015-07-25T23:09:01.795+0700"}
Nach dem Login kopieren

Schlussfolgerung

Durch Hinzufügen von Jacksons JavaTimeModule und Verwendung der @JsonFormat-Annotation können Sie das JSON-Serialisierungsformat von ZonedDateTime steuern und die Übertragung unnötiger Daten verhindern. Optimierung der Leistung und Reduzierung der Größe der JSON-Nutzlasten.

Das obige ist der detaillierte Inhalt vonWie formatiere ich ZonedDateTime in der Spring Data JPA JSON-Serialisierung auf ISO 8601?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage