Maison > Java > javaDidacticiel > Comment formater ZonedDateTime en ISO 8601 dans la sérialisation Spring Data JPA JSON ?

Comment formater ZonedDateTime en ISO 8601 dans la sérialisation Spring Data JPA JSON ?

DDD
Libérer: 2024-12-13 18:16:18
original
776 Les gens l'ont consulté

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

Spring Data JPA : formatage de ZonedDateTime dans la sérialisation JSON

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.

Énoncé du problème

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.

Solution

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é.

Ajout de dépendance

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>
Copier après la connexion

Enregistrement du module

Après avoir ajouté la dépendance, enregistrez le JavaTimeModule avec Jackson :

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
Copier après la connexion

Personnalisation du formateur

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;
}
Copier après la connexion

Cela formatera le ZonedDateTime au format ISO : aaaa-MM-jj'T'HH:mm:ss.SSSZ.

Exemple

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;
    }
}
Copier après la connexion

Le résultat de ce Un exemple serait :

{"time":"2015-07-25T23:09:01.795+0700"}
Copier après la connexion

Conclusion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal