Verwenden Sie java.time mit Jackson

Zweck

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"}

Lösung

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")));

Quellcode

Der für die Erklärung verwendete Quellcode ist in git aufgeführt. Bitte versuchen Sie es.

Recommended Posts

Verwenden Sie java.time mit Jackson
Verwenden Sie Interceptor im Frühjahr
Verwenden Sie OpenCV mit Java
Verwenden Sie MouseListener für die Verarbeitung
Verwenden Sie Bilder mit Schienen
Verwenden Sie PostgreSQL in Scala
Verwenden Sie PreparedStatement in Java
Verwenden Sie Ruby-Variablen in Javascript.
Verwenden Sie mehrere Kontrollkästchen in Rails6!
Wie man Lombok im Frühling benutzt
Verwenden Sie den Konstruktor mit Argumenten in cucumber-picocontainer
Verwenden wir Twilio in Java! (Einführung)
[Rails] Verwenden Sie Cookies im API-Modus
[Java] Verwenden Sie nicht "+" im Anhang!
Verwenden Sie zusammengesetzte Schlüssel in Java Maps.
Verwenden Sie das Findbugs-Plugin in Eclipse
Verwendung von InjectorHolder in OpenAM
Wie verwende ich Klassen in Java?
Verwenden Sie die Vervollständigung in Eclipse auf dem Mac
Problemumgehung für bereits verwendete Adressen (Windows)
Verwenden Sie Stream in Java?
[Cloud9] Bereits verwendete Adresse [Lösung]
JSON in Java und Jackson Teil ③ Betten Sie JSON in HTML ein und verwenden Sie es aus JavaScript
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Verwenden Sie OpenCV_Contrib (ArUco) mit Java! (Teil 2-Programmierung)
[Docker] Verwenden Sie Umgebungsvariablen in Nginx conf
Studieren Sie Java 8 (Datums-API im Paket java.time)
Verwenden Sie Ungleichheitsvergleichsoperatoren in MyBatis SQL
Verwenden Sie Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1
[Java] Verwenden Sie kryptografische Technologie mit Standardbibliotheken
Verwendung von Docker in VSCode DevContainer
Verwendung von MySQL im Rails-Tutorial
Verwenden Sie "Rhino", das JavaScript in Java ausführt
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Verwendung von Umgebungsvariablen in RubyOnRails
Ich möchte @Autowired in Servlet verwenden
Verstehe in 5 Minuten !! Wie man Docker benutzt
Verwendung von credentials.yml.enc aus Rails 5.2
So montieren Sie JSON direkt in Jackson
Schritte zur Verwendung von JConsole mit Cognos Analytics
Verwendung von ExpandableListView in Android Studio