Heim >Java >javaLernprogramm >Wie serialisiere und deserialisiere ich LocalDate mit Jackson in Java?

Wie serialisiere und deserialisiere ich LocalDate mit Jackson in Java?

DDD
DDDOriginal
2024-12-18 15:18:10247Durchsuche

How to Serialize and Deserialize LocalDate with Jackson in Java?

LocalDate-Serialisierung mit Jackson

Bei der Arbeit mit dem LocalDate-Feld und der JSON-Serialisierung von Java 8 reichen die standardmäßigen Java 8-Anmerkungen möglicherweise nicht immer aus. Um dieses Problem zu beheben, wird eine benutzerdefinierte Lösung vorgestellt, die Jacksons Module und einen ContextResolver verwendet.

Jackson stellt das JSR310Module (jetzt ersetzt durch JavaTimeModule) bereit, um die Serialisierung und Deserialisierung von Java 8-Datums- und Zeittypen zu handhaben. Um es zu nutzen, befolgen Sie diese Schritte:

  1. Fügen Sie die Abhängigkeit zu Ihrem Projekt hinzu:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
  2. Erstellen Sie einen ContextResolver, um den ObjectMapper zu konfigurieren Umgang mit LocalDate und anderen Java 8-Datums- und Uhrzeitangaben Typen:

    @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. Verwenden Sie den ContextResolver in Ihrer Ressourcenklasse, um den ObjectMapper für Ihre Endpunkte anzupassen:

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

Mit diesem Ansatz , LocalDate-Felder werden ordnungsgemäß serialisiert und deserialisiert, wenn Jackson für die JSON-Verarbeitung verwendet wird. Die Lösung berücksichtigt auch die Anforderung, die Serialisierung von Datumsangaben als Zeitstempel zu verhindern, indem „write-date-as-timestamp“ auf „false“ gesetzt wird.

Hinweis: Das JSR310Module ist in Jackson-Versionen 2.7 und höher veraltet . Es wird empfohlen, stattdessen JavaTimeModule zu verwenden, das Teil derselben Abhängigkeit ist.

Das obige ist der detaillierte Inhalt vonWie serialisiere und deserialisiere ich LocalDate mit Jackson in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn