Maison >Java >javaDidacticiel >Comment sérialiser et désérialiser LocalDate avec Jackson en Java ?

Comment sérialiser et désérialiser LocalDate avec Jackson en Java ?

DDD
DDDoriginal
2024-12-18 15:18:10260parcourir

How to Serialize and Deserialize LocalDate with Jackson in Java?

Sérialisation LocalDate avec Jackson

Lorsque vous travaillez avec le champ LocalDate de Java 8 et la sérialisation JSON, les annotations Java 8 standard peuvent ne pas toujours suffire. Pour résoudre ce problème, une solution personnalisée utilisant les modules de Jackson et un ContextResolver est présentée.

Jackson fournit le JSR310Module (maintenant remplacé par JavaTimeModule) pour gérer la sérialisation et la désérialisation des types de date et d'heure Java 8. Pour l'utiliser, suivez ces étapes :

  1. Ajoutez la dépendance à votre projet :

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
  2. Créez un ContextResolver pour configurer l'ObjectMapper pour gestion de LocalDate et d'autres dates et heures Java 8 types :

    @Provider
    public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
    
        private final ObjectMapper MAPPER;
    
        public ObjectMapperContextResolver() {
            MAPPER = new ObjectMapper();
            MAPPER.registerModule(new JavaTimeModule());
            MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        }
    
        @Override
        public ObjectMapper getContext(Class<?> type) {
            return MAPPER;
        }
    
    }
  3. Utilisez le ContextResolver dans votre classe de ressources pour personnaliser l'ObjectMapper pour vos points de terminaison :

    @Path("person")
    public class LocalDateResource {
    
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response getPerson() {
            Person person = new Person();
            person.birthDate = LocalDate.now();
            return Response.ok(person).build();
        }
    
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        public Response createPerson(Person person) {
            return Response.ok(
                    DateTimeFormatter.ISO_DATE.format(person.birthDate)).build();
        }
    
        public static class Person {
            public LocalDate birthDate;
        }
    }

Avec cette approche , les champs LocalDate seront correctement sérialisés et désérialisés lors de l'utilisation de Jackson pour la gestion JSON. La solution répond également à l'exigence d'empêcher la sérialisation des dates sous forme d'horodatage en définissant write-date-as-timestamp sur false.

Remarque : Le module JSR310 est obsolète dans les versions 2.7 et supérieures de Jackson. . Il est recommandé d'utiliser plutôt JavaTimeModule, qui fait partie de la même dépendance.

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!

Déclaration:
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