Ich habe ein kleines Problem beim Formatieren von Java 8 LocalDateTime in meiner Spring Boot-Anwendung. Mit 'normalen' Daten habe ich kein Problem, aber die LocalDateTime-Felder werden in Folgendes konvertiert:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Während ich es in etwas konvertieren möchte wie:
"startDate": "2015-01-01"
Mein Code sieht folgendermaßen aus:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Aber eine der oben genannten Anmerkungen funktioniert nicht, das Datum wird immer wieder wie oben formatiert. Vorschläge willkommen!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
Eintrag zu verwenden, wie in der Antwort von @patelb vorgeschlagen.@JsonSerialize
Anmerkung, die Nick erwähnte, um sie zum Laufen zu bringen.Ich fügte die
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
Abhängigkeit hinzu und begann, das Datum im folgenden Format abzurufen:Das ist nicht das, was ich wollte, aber ich kam näher. Ich habe dann folgendes hinzugefügt
in die Datei application.properties, die mir das richtige Format gab, das ich brauchte.
quelle
jackson-datatype-jsr310
Abhängigkeit sofort funktioniert . Dies sollte die akzeptierte Antwort sein.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Hier ist es in Maven, mit der Eigenschaft, so dass Sie zwischen Spring Boot Upgrades überleben können
quelle
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Abhängigkeit
2) Anmerkung im Datums- / Uhrzeitformat.
3) Federkonfiguration
quelle
Ich habe eine andere Lösung gefunden, mit der Sie sie in ein beliebiges Format konvertieren und auf alle LocalDateTime-Datentypen anwenden können. Sie müssen @JsonFormat nicht über jedem LocalDateTime-Datentyp angeben. Fügen Sie zuerst die Abhängigkeit hinzu:
Fügen Sie die folgende Bohne hinzu:
Fügen Sie in Ihrer Konfigurationsdatei Folgendes hinzu:
Dadurch werden alle Eigenschaften LocalDateTime und ZonedDateTime serialisiert und de-serialisiert, solange Sie den von spring erstellten objectMapper verwenden.
Das Format, das Sie für ZonedDateTime erhalten haben, lautet: "2017-12-27T08: 55: 17.317 + 02: 00 [Asia / Jerusalem]" für LocalDateTime lautet: "2017-12-27T09: 05: 30.523"
quelle
SimpleModule
erweitertModule
.Module
ist eine Zusammenfassung.val bean = new SimpleModule();
funktioniert perfekt.Schreiben Sie diese Antwort auch als Erinnerung für mich.
Ich habe hier mehrere Antworten kombiniert und am Ende haben meine mit so etwas gearbeitet. (Ich verwende SpringBoot 1.5.7 und Lombok 1.16.16)
quelle
DateTimeFormat
und andere hinzufügen .Das funktioniert gut:
Fügen Sie die Abhängigkeit hinzu:
Fügen Sie die Anmerkung hinzu:
Jetzt müssen Sie das richtige Format erhalten.
Um Object Mapper verwenden zu können, müssen Sie JavaTime registrieren
quelle
Wie bereits erwähnt, ruft Spring-Boot alles ab, was Sie benötigen (sowohl für den Web- als auch für den Webflux-Starter).
Aber was ist noch besser - Sie müssen keine Module selbst registrieren. Schauen Sie hier . Da die
@SpringBootApplication
Verwendung@EnableAutoConfiguration
unter der Haube erfolgt, werden sieJacksonAutoConfiguration
automatisch zum Kontext hinzugefügt. Wenn Sie jetzt hineinschauenJacksonAutoConfiguration
, werden Sie sehen:Dieser Typ wird während der Initialisierung aufgerufen und ruft alle Module ab, die er im Klassenpfad finden kann. (Ich benutze Spring Boot 2.1)
quelle
Ich verwende Springboot 2.0.6 und aus irgendeinem Grund haben die Änderungen an der App yml nicht funktioniert. Und ich hatte auch mehr Anforderungen.
Ich habe versucht, ObjectMapper zu erstellen und als primär zu markieren, aber Spring Boot hat sich beschwert, dass ich jackOObjectMapper bereits als primär markiert habe !!
Das habe ich also getan. Ich habe Änderungen am internen Mapper vorgenommen.
Mein Serializer und Deserializer sind etwas Besonderes - sie befassen sich mit 'TT / MM / JJJJ'; und während der De-Serialisierung versucht es sein Bestes, 3-4 beliebte Formate zu verwenden, um sicherzustellen, dass ich ein lokales Datum habe.
quelle
@JsonDeserialize(using= LocalDateDeserializer.class)
funktioniert bei mir mit der folgenden abhängigkeit nicht.Ich habe den folgenden Code-Konverter verwendet, um das Datum in ein zu deserialisieren
java.sql.Date
.quelle
Verwenden Sie einfach:
oder Sie können Muster verwenden, wie Sie möchten, z.
('-' in place of '/')
quelle
Ich benutze Spring Boot 2.1.8. Ich habe importiert
welches den jackson-datatype-jsr310 enthält .
Dann musste ich diese Anmerkungen hinzufügen
und es funktioniert. Der JSON sieht folgendermaßen aus:
quelle
spring-boot-starter-json
ist nur erforderlich, wennspring-boot-starter-web
es fehlt.