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
Patricia Arquetteoriginal
2024-12-17 17:35:14579parcourir

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;

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>
  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;
        }  
    }
  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;
        }
    }

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

Attendu Réponse :

{"birthDate":"2015-03-01"}
2015-03-01

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