Spring Data JPA prend en charge le mappage des types de date et d'heure Java 8 avec les colonnes de la base de données. Cependant, le format de sérialisation JSON par défaut pour ZonedDateTime peut produire une sortie détaillée. Cet article explique comment formater ZonedDateTime au format ISO pendant la sérialisation JSON.
Malgré l'utilisation de l'annotation @DateTimeFormat avec iso = DateTimeFormat.ISO.DATE_TIME, la sérialisation JSON de ZonedDateTime produit toujours un objet détaillé. L'objectif est de formater ZonedDateTime dans un format ISO plus concis.
Le problème de sérialisation JSON est probablement causé par Jackson, qui gère la sérialisation JSON dans Spring Data JPA. Pour résoudre ce problème, le module de Jackson pour l'API de date et d'heure Java 8 doit être ajouté.
Ajoutez la dépendance suivante à votre pom.xml :
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.6.0</version> </dependency>
Après avoir ajouté la dépendance, enregistrez le JavaTimeModule avec Jackson :
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule());
L'annotation @JsonFormat sur la méthode getter ZonedDateTime peut être utilisée pour personnaliser le format de date lors de la sérialisation. Par exemple :
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ") public ZonedDateTime getTime() { return time; }
Cela formatera le ZonedDateTime au format ISO : aaaa-MM-jj'T'HH:mm:ss.SSSZ.
L'exemple suivant montre l'utilisation de JavaTimeModule et la personnalisation du format :
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; } }
Le résultat de ce Un exemple serait :
{"time":"2015-07-25T23:09:01.795+0700"}
En ajoutant le JavaTimeModule de Jackson et en utilisant l'annotation @JsonFormat, vous pouvez contrôler le format de sérialisation JSON de ZonedDateTime et empêcher le transfert de données inutiles, optimisant ainsi le performances et réduction de la taille des charges utiles JSON.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!