Rumah >Java >javaTutorial >Bagaimana untuk Memformat LocalDate Java 8 dengan betul dengan Jackson?

Bagaimana untuk Memformat LocalDate Java 8 dengan betul dengan Jackson?

Patricia Arquette
Patricia Arquetteasal
2024-12-17 17:35:14634semak imbas

How to Properly Format Java 8's LocalDate with Jackson?

Menggunakan Jackson untuk Memformat LocalDate dalam Java 8

Dalam artikel ini, kami akan meneroka cara memformat java.time.LocalDate menggunakan Jackson dalam Java 8.

Penerangan Masalah

Apabila bekerja dengan Java Medan LocalDate 8, cuba menggunakan anotasi yang sama yang digunakan untuk java.util.Date mungkin tidak menghasilkan hasil yang diingini.

Percubaan Gagal

@JsonDeserialize(using = LocalDateDeserializer.class)  
@JsonSerialize(using = LocalDateSerializer.class)  
private LocalDate dateOfBirth;

Penyelesaian

Untuk dengan betul format LocalDate, langkah berikut sepatutnya diambil:

  1. Tambahkan kebergantungan jackson-datatype-jsr310:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
  2. Buat 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;
        }  
    }
  3. Daftarkan ObjectMapperContextResolver dalam kelas sumber:

    @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;
        }
    }

Ujian

Anda kini boleh menguji pemformatan dengan mengeluarkan permintaan HTTP berikut:

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

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

Dijangka Maklum balas:

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

Atas ialah kandungan terperinci Bagaimana untuk Memformat LocalDate Java 8 dengan betul dengan Jackson?. 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