Maison > Java > javaDidacticiel > Comment formater correctement la LocalDate de Java 8 avec Jackson ?

Comment formater correctement la LocalDate de Java 8 avec Jackson ?

Patricia Arquette
Libérer: 2024-12-17 17:35:14
original
577 Les gens l'ont consulté

How to Properly Format Java 8's LocalDate with Jackson?

Utiliser Jackson pour formater LocalDate dans Java 8

Dans cet article, nous explorerons comment formater java.time.LocalDate à l'aide de Jackson en Java 8.

Description du problème

Lorsque vous travaillez avec Java 8, tenter d'utiliser les mêmes annotations que celles utilisées pour java.util.Date peut ne pas donner les résultats souhaités.

Tentative échouée

@JsonDeserialize(using = LocalDateDeserializer.class)  
@JsonSerialize(using = LocalDateSerializer.class)  
private LocalDate dateOfBirth;
Copier après la connexion

Solution

Pour correctement formater LocalDate, les étapes suivantes doivent être suivies :

  1. Ajouter le Dépendance jackson-datatype-jsr310 :

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
    Copier après la connexion
  2. Créer un ContextResolver pour ObjectMapper :

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
    import javax.ws.rs.ext.ContextResolver;
    import javax.ws.rs.ext.Provider;
    
    @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;
        }  
    }
    Copier après la connexion
  3. Enregistrer l'ObjectMapperContextResolver dans la ressource class :

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

Test

Vous pouvez maintenant tester le formatage en émettant les requêtes HTTP suivantes :

# Get person
curl -v http://localhost:8080/api/person

# Create person
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
Copier après la connexion

Attendu Réponse :

{"birthDate":"2015-03-01"}
Copier après la connexion
2015-03-01
Copier après la connexion

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal