Sérialisation LocalDate avec Jackson
Lorsque vous travaillez avec le champ LocalDate de Java 8 et la sérialisation JSON, les annotations Java 8 standard peuvent ne pas toujours suffire. Pour résoudre ce problème, une solution personnalisée utilisant les modules de Jackson et un ContextResolver est présentée.
Jackson fournit le JSR310Module (maintenant remplacé par JavaTimeModule) pour gérer la sérialisation et la désérialisation des types de date et d'heure Java 8. Pour l'utiliser, suivez ces étapes :
Ajoutez la dépendance à votre projet :
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.4.0</version> </dependency>
Créez un ContextResolver pour configurer l'ObjectMapper pour gestion de LocalDate et d'autres dates et heures Java 8 types :
@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; } }
Utilisez le ContextResolver dans votre classe de ressources pour personnaliser l'ObjectMapper pour vos points de terminaison :
@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; } }
Avec cette approche , les champs LocalDate seront correctement sérialisés et désérialisés lors de l'utilisation de Jackson pour la gestion JSON. La solution répond également à l'exigence d'empêcher la sérialisation des dates sous forme d'horodatage en définissant write-date-as-timestamp sur false.
Remarque : Le module JSR310 est obsolète dans les versions 2.7 et supérieures de Jackson. . Il est recommandé d'utiliser plutôt JavaTimeModule, qui fait partie de la même dépendance.
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!