Maison >Java >javaDidacticiel >Comment puis-je formater LocalDate avec Jackson dans Java 8 ?

Comment puis-je formater LocalDate avec Jackson dans Java 8 ?

DDD
DDDoriginal
2024-12-11 04:39:121021parcourir

How Can I Format LocalDate with Jackson in Java 8?

Formatage de LocalDate avec Jackson dans Java 8

Lorsque vous traitez java.util.Date, l'annotation @JsonFormat fournit un formatage pratique. Cependant, pour le champ LocalDate de Java 8, l'utilisation de sérialiseurs et de désérialiseurs personnalisés peut ne pas suffire.

Pour obtenir le formatage souhaité, une approche plus complète est recommandée. En introduisant le module Jackson JSR310, des fonctionnalités supplémentaires deviennent disponibles.

Dépendance

Tout d'abord, ajoutez la dépendance Jackson :

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.4.0</version>
</dependency>
Remarque : Assurez-vous que les versions de dépendances incluses sont alignées pour éviter une résolution potentielle de classe conflits.

ContextResolver

Ensuite, définissez 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;
    }  
}

Classe de ressources

Dans la classe de ressources, utilisez le ObjectMapperContextResolver :

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

Exemple

Demande :

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

Résultat :

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

Publier Requête :

curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person

Résultat de publication :

2015-03-01

Conclusion

En employant JSR310Module, ObjectMapperContextResolver et en définissant SerializationFeature.WRITE_DATES_AS_TIMESTAMPS à false, Java 8 LocalDate peut être formaté efficacement avec Jackson.

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