LocalDate Serialization with Jackson
When working with Java 8's LocalDate field and JSON serialization, the standard Java 8 annotations might not always suffice. To address this, a custom solution using Jackson's modules and a ContextResolver is presented.
Jackson provides the JSR310Module (now replaced with JavaTimeModule) to handle the serialization and deserialization of Java 8 date and time types. To utilize it, follow these steps:
Add the dependency to your project:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.4.0</version> </dependency>
Create a ContextResolver to configure the ObjectMapper for handling LocalDate and other Java 8 date and time 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; } }
Use the ContextResolver in your resource class to customize the ObjectMapper for your endpoints:
@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; } }
With this approach, LocalDate fields will be properly serialized and deserialized when using Jackson for JSON handling. The solution also addresses the requirement to prevent serialization of dates as timestamps by setting write-date-as-timestamp to false.
Note: The JSR310Module has been deprecated in Jackson versions 2.7 and above. It is recommended to use JavaTimeModule instead, which is part of the same dependency.
The above is the detailed content of How to Serialize and Deserialize LocalDate with Jackson in Java?. For more information, please follow other related articles on the PHP Chinese website!