Home > Java > javaTutorial > How to Serialize and Deserialize LocalDate with Jackson in Java?

How to Serialize and Deserialize LocalDate with Jackson in Java?

DDD
Release: 2024-12-18 15:18:10
Original
244 people have browsed it

How to Serialize and Deserialize LocalDate with Jackson in Java?

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:

  1. Add the dependency to your project:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
    Copy after login
  2. 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;
        }
    
    }
    Copy after login
  3. 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;
        }
    }
    Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template