Jackson konvertiert java.util.Date und java.util.Time in good, und die Ausgabe erfolgt in einem Format wie JJJJ-MM-TT, HH: MM: SS. Andererseits wird die nach Java 8 hinzugefügte Local ~ -Klasse des Pakets java.time nicht gut serialisiert und wie unten gezeigt als assoziatives Array verarbeitet.
(Der folgende Quellcode ist inkonsistent, da er die Ausführungszeit verwendet, um Datum und Uhrzeit abzurufen.)
{"id":1,"name":"hoge","registrationDateTime":{"dayOfMonth":19,"dayOfWeek":"WEDNESDAY","dayOfYear":262,"month":"SEPTEMBER","monthValue":9,"year":2018,"hour":10,"minute":28,"nano":916000000,"second":37,"chronology":{"id":"ISO","calendarType":"iso8601"}}}
Damit gibt es viele unnötige Informationen, und der Empfänger wird in Schwierigkeiten geraten, daher möchte ich Folgendes tun.
{"id":1,"name":"hoge","registrationDateTime":"2018/09/19 10:29:30"}
Zunächst müssen Sie die folgenden Module explizit in der ObjectMapper-Instanz registrieren, damit Jackson mit java.time umgehen kann.
Wenn Sie diese Klasse wie folgt verwenden, wird java.time zu einem gewissen Grad auf leicht verständliche Weise serialisiert.
ObjectMapper om = new ObjectMapper();
JavaTimeModule jtm = new JavaTimeModule();
om.registerModule(jtm);
Infolgedessen wird es wie folgt serialisiert.
{"id":1,"name":"hoge","registrationDateTime":[2018,9,19,10,24,49,73000000]}
Dies ist immer noch umständlich, daher müssen wir das Standardformat ändern.
Jedes Format kann wie folgt angegeben werden.
jtm.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));
Infolgedessen wird es wie folgt serialisiert.
{"id":1,"name":"hoge","registrationDateTime":"2018/09/19 10:29:30"}
Dieses Mal konzentrieren wir uns auf die Serialisierung. Wenn Sie jedoch Datum und Uhrzeit mit java.time in JavaObject deserialisieren, tritt eine Ausnahme auf, wenn das Format JJJJ / MM / TT lautet. Dies entspricht dem Verfahren zum Registrieren des Serializers. Sie müssen den Desirializer auch wie folgt registrieren.
jtm.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));
Der für die Erklärung verwendete Quellcode ist in git aufgeführt. Bitte versuchen Sie es.
Recommended Posts