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
Freigeben: 2024-12-17 17:35:14
Original
577 Leute haben es durchsucht

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;
Nach dem Login kopieren

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>
    Nach dem Login kopieren
  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;
        }  
    }
    Nach dem Login kopieren
  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;
        }
    }
    Nach dem Login kopieren

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
Nach dem Login kopieren

Erwartet Antwort:

{"birthDate":"2015-03-01"}
Nach dem Login kopieren
2015-03-01
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage