Rumah >Java >javaTutorial >Bagaimanakah saya boleh memformat LocalDate dengan Jackson dalam Java 8?

Bagaimanakah saya boleh memformat LocalDate dengan Jackson dalam Java 8?

DDD
DDDasal
2024-12-11 04:39:121017semak imbas

How Can I Format LocalDate with Jackson in Java 8?

Memformat LocalDate dengan Jackson dalam Java 8

Apabila berurusan dengan java.util.Date, anotasi @JsonFormat menyediakan pemformatan yang mudah. Walau bagaimanapun, untuk medan LocalDate Java 8, menggunakan penyeri tersuai dan penyahserialisasi mungkin tidak mencukupi.

Untuk mencapai pemformatan yang diingini, pendekatan yang lebih komprehensif disyorkan. Dengan memperkenalkan Jackson JSR310Module, kefungsian tambahan tersedia.

Kebergantungan

Pertama, tambahkan kebergantungan Jackson:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.4.0</version>
</dependency>
Nota: Pastikan bahawa versi pergantungan yang disertakan diselaraskan untuk mengelakkan potensi resolusi kelas konflik.

ContextResolver

Seterusnya, tentukan ContextResolver untuk 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;
    }  
}

Kelas Sumber

Dalam kelas sumber, gunakan 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;
    }
}

Contoh

Permintaan:

curl -v http://localhost:8080/api/person

Hasil:

{"birthDate":"2015-03-01"}

Siaran Permintaan:

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

Keputusan Siaran:

2015-03-01

Kesimpulan

Dengan menggunakan JSR310Module, ObjectMapperContextResolver, dan menetapkan SerializationSTAMPS_DATEFeatures kepada palsu, Java 8 LocalDate boleh diformatkan dengan berkesan dengan Jackson.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memformat LocalDate dengan Jackson dalam Java 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn