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
DDDOriginal
2024-12-13 18:16:18770Durchsuche

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>

Modulregistrierung

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

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());

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;
}

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;
    }
}

Die Ausgabe dieses Beispiels wäre:

{"time":"2015-07-25T23:09:01.795+0700"}

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!

Stellungnahme:
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