Home > Java > javaTutorial > How Can I Format LocalDate with Jackson in Java 8?

How Can I Format LocalDate with Jackson in Java 8?

DDD
Release: 2024-12-11 04:39:12
Original
1015 people have browsed it

How Can I Format LocalDate with Jackson in Java 8?

Formatting LocalDate with Jackson in Java 8

When dealing with java.util.Date, the @JsonFormat annotation provides convenient formatting. However, for Java 8's LocalDate field, using custom serializers and deserializers may not suffice.

To achieve the desired formatting, a more comprehensive approach is recommended. By introducing the Jackson JSR310Module, additional functionalities become available.

Dependency

First, add the Jackson dependency:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.4.0</version>
</dependency>
Copy after login
Note: Ensure that the included dependency versions are aligned to avoid potential class resolution conflicts.

ContextResolver

Next, define a ContextResolver for 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;
    }  
}
Copy after login

Resource Class

In the resource class, utilize the 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;
    }
}
Copy after login

Example

Request:

curl -v http://localhost:8080/api/person
Copy after login

Result:

{"birthDate":"2015-03-01"}
Copy after login

Post Request:

curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
Copy after login

Post Result:

2015-03-01
Copy after login

Conclusion

By employing JSR310Module, ObjectMapperContextResolver, and setting SerializationFeature.WRITE_DATES_AS_TIMESTAMPS to false, Java 8's LocalDate can be formatted effectively with Jackson.

The above is the detailed content of How Can I Format LocalDate with Jackson in Java 8?. 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