Maison >Java >javaDidacticiel >Comment puis-je formater LocalDate de Java 8 avec Jackson sans annotations ?

Comment puis-je formater LocalDate de Java 8 avec Jackson sans annotations ?

DDD
DDDoriginal
2024-12-11 01:43:10384parcourir

How Can I Format Java 8's LocalDate with Jackson Without Annotations?

Formatage de LocalDate de Java 8 avec Jackson

Le formatage basé sur les annotations de Jackson pour java.util.Date s'étend de manière transparente aux champs LocalDate dans Java 8. Pour y parvenir, évitez d'utiliser des annotations et utilisez plutôt ContextResolver de Jackson en conjonction avec le JavaTimeModule.

ContextResolver :

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 :

import java.time.LocalDate;

@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 :

En utilisant cette approche, vous devriez être capable de sérialiser et désérialisez les valeurs LocalDate sous forme de chaînes JSON en utilisant le format ISO-8601.

Pour plus d'informations, reportez-vous à la documentation du module JSR310.

Remarque :

Depuis la version 2.7 de Jackson, le module JSR310 est obsolète. Utilisez plutôt le JavaTimeModule.

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