Heim >Java >javaLernprogramm >Wie formatiere ich das LocalDate von Java 8 mit Jackson richtig?

Wie formatiere ich das LocalDate von Java 8 mit Jackson richtig?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-17 17:35:14655Durchsuche

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

Mit Jackson LocalDate in Java 8 formatieren

In diesem Artikel erfahren Sie, wie Sie java.time.LocalDate mit Jackson formatieren in Java 8.

Problembeschreibung

Beim Arbeiten mit Java 8 LocalDate-Feld, der Versuch, dieselben Anmerkungen wie für java.util.Date zu verwenden, führt möglicherweise nicht zu den gewünschten Ergebnissen.

Fehlgeschlagener Versuch

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

Lösung

Korrekte Formatierung LocalDate, die folgenden Schritte sollten durchgeführt werden:

  1. Fügen Sie die hinzu jackson-datatype-jsr310-Abhängigkeit:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
  2. Erstellen Sie einen ContextResolver für 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. Registrieren Sie den ObjectMapperContextResolver in der Ressource Klasse:

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

Testen

Sie können jetzt die Formatierung testen, indem Sie die folgenden HTTP-Anfragen ausgeben:

# 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

Erwartet Antwort:

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

Das obige ist der detaillierte Inhalt vonWie formatiere ich das LocalDate von Java 8 mit Jackson richtig?. 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