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.
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.
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.
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>
Registrieren Sie nach dem Hinzufügen der Abhängigkeit das JavaTimeModule bei Jackson:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule());
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.
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"}
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!