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

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

DDD
Libérer: 2024-12-11 04:39:12
original
1015 Les gens l'ont consulté

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

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

Exemple

Demande :

curl -v http://localhost:8080/api/person
Copier après la connexion

Résultat :

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

Publier Requête :

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

Résultat de publication :

2015-03-01
Copier après la connexion

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!

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