Deserialisieren LocalDateTime mit Jackson JSR310 Modul
Bin ich mit der Bibliothek beschrieben die Jackson-Datentyp JSR310 Seite aber ich bin immer noch Schwierigkeiten haben, es zu arbeiten.
Habe ich Folgendes konfiguriert bean:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
return mapper;
}
Wenn ich mein REST-API der aktuellen format-Ausgabe ist yyyy-MM-dd'T'HH:ss.SSSSSS
z.B. 2015-04-11T00:10:38.905847
. Diese wird behandelt durch meine AngularJS code gerade fein.
Wenn ich will, etwas zu Unterwerfen, um die REST-API wird das Datum geschrieben, so yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
z.B. 2015-04-09T08:30:00.000Z
Jackson hält Klagen über das 'Z' am Ende. Wenn ich sehe, das LocalDateTimeDeserializer
in der Dokumentation verwendet die DateTimeFormatter.ISO_LOCAL_DATE_TIME
welche kocht, um ISO_LOCAL_DATE'T'ISO_LOCAL_TIME
es erwähnt hat es keine override-zone.
Also dachte ich, ich sollte die DateFormat
auf die ObjectMapper
ich bin zu erstellen:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
return mapper;
}
Aber das macht nichts. Ich änderte es, um so etwas einfaches wie yyyy-MM-dd
aber die serialisierten Datum blieb im bisherigen format und die Deserialisierung ist nicht beeinflusst entweder.
Was mache ich hier falsch, diese zu arbeiten? Das Datum-format in mein JavaScript-code ist, soweit ich weiß, die ISO-8601-format...
das funktioniert tatsächlich, vielen Dank. Wenn Sie uns als Antwort werde ich markieren Sie es als richtig. Finde es immer noch seltsam, dass der dateFormat-Einstellung auf dem objectmapper selbst hat absolut keine Wirkung hinsichtlich Serialisierung/Deserialisierung aber mit ZonedDateTime ist einfach genug 🙂
Der ObjectMapper s DateFormat ist nur für die built-in java.util.Datum-Unterstützung, denke ich. Wenn ein Wert mit einem Zeit-zone Hinweis auf einen LocalDateTime ist ein Geruch - Sofortige oder OffsetDateTime (oder sogar ZonedDateTime) mehr anwendbar.
InformationsquelleAutor Mekswoll | 2015-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht notwendig zu schreiben, Ihre eigenen serializer. Es ist genug, den Standardwert verwenden, aber eine Instanz mit einem anderen format (die
time_zone
), so dass der übersteigende Teil ist gerade geschnitten:In meinem Fall habe ich eine
contextResolver
wie dies zu erreichen ist bei der Konfiguration Ebene:ObjectMapper
automatisch und richtig behandeln Deserialisierung. Dies ist erforderlich, wenn Sie nicht manuell, verwenden Sie dieObjectMapper
intsance zu Lesen, eingehende strings, sondern arbeiten durch Dinge wieRestTemplate
Hmmm. Ich bekomme diese exception, wenn ich so probiert: java.lang.IllegalAccessError: die versuchte Zugriffsmethode com.fasterxml.jackson.databind.ser.std.StdSerializer.<init>(Ljava/lang/Class;)V-Klasse Kom.fasterxml.jackson.datatype.jsr310.JavaTimeModule
könnte man einen Blick stackoverflow.com/questions/44918021/... ? Ist es ähnlich? Wenn möglich Antwort bitte.
InformationsquelleAutor user1299153
Jetzt
LocalDateTimeDeserializer
nicht zu respektieren scheinen, das Datumsformat festlegen für das Objekt-mapper.Machen es Arbeit, die Sie überschreiben können
LocalDateTimeDeserializer
oder-Schalter zu verwendenZoneDateTime
mit der 'Z' char am Ende.Hier ist ein Beispiel:
Ausgabe:
JSR310Module
ist veraltet, verwenden SieJavaTimeModule
statt.InformationsquelleAutor Alexey Gavrilov
Hibernate 4, Spring 4 - REST, WS-Client - Spring-Boot-1.5.2. In meinem Fall habe ich in Entity ZonedDateTime Klasse Karte Timestamp in der Datenbank. Hibernate sowie Spring Boot REST funktioniert einwandfrei. Ich muss nur hinzufügen, dass Bibliotheken in pom Datei:
Also ich nehme an, dass Konverter implementiert, innen Feder für LocalDateTime als gut.Die jackson.version ist die neueste.
JSR310Module
Klasse wäre nicht verfügbar).Ja, natürlich, aber ich habe nichts mehr zu tun. Objekt-Mapper wird nicht benötigt, weder die Registrierung von Modul.
InformationsquelleAutor hariprasad