Utilisez java.time avec Jackson

Objectif

Jackson convertira java.util.Date et java.util.Time en good, et la sortie sera dans un format tel que aaaa-MM-jj, HH: MM: ss. D'un autre côté, la classe Local ~ du package java.time ajoutée après Java 8 ne sérialise pas correctement et elle est traitée comme un tableau associatif comme indiqué ci-dessous.

(Le code source suivant est incohérent car il utilise l'heure d'exécution pour obtenir la date et l'heure.)

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

Avec cela, il y a beaucoup d'informations inutiles, et le destinataire sera en difficulté, alors je voudrais faire ce qui suit.

{"id":1,"name":"hoge","registrationDateTime":"2018/09/19 10:29:30"}

Solution

Tout d'abord, vous devez enregistrer explicitement les modules suivants dans l'instance ObjectMapper afin que Jackson puisse gérer java.time.

En utilisant cette classe comme suit, java.time sera sérialisé dans une certaine mesure d'une manière facile à comprendre.

ObjectMapper om = new ObjectMapper();
		
JavaTimeModule jtm = new JavaTimeModule();
		
om.registerModule(jtm);

En conséquence, il sera sérialisé comme suit.

{"id":1,"name":"hoge","registrationDateTime":[2018,9,19,10,24,49,73000000]}

C'est encore gênant, nous devons donc changer le format par défaut.

Tout format peut être spécifié comme suit.

jtm.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));

En conséquence, il sera sérialisé comme suit.

{"id":1,"name":"hoge","registrationDateTime":"2018/09/19 10:29:30"}

Cette fois, nous nous concentrons sur la sérialisation, mais lors de la désérialisation de la date et de l'heure vers JavaObject à l'aide de java.time, une exception se produira si le format est aaaa / MM / jj, c'est donc la même chose que la procédure d'enregistrement du sérialiseur. Le Desirializer doit également être enregistré comme suit.

jtm.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")));

Code source

Le code source utilisé pour l'explication est répertorié dans git. Veuillez l'essayer.

Recommended Posts

Utilisez java.time avec Jackson
Utilisez Interceptor au printemps
Utiliser OpenCV avec Java
Utiliser MouseListener avec le traitement
Utiliser des images avec des rails
Utiliser PostgreSQL dans Scala
Utiliser PreparedStatement en Java
Utilisez des variables ruby en javascript.
Utilisez plusieurs cases à cocher dans Rails6!
Comment utiliser Lombok au printemps
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Utilisons Twilio en Java! (Introduction)
[Rails] Utiliser des cookies en mode API
[Java] N'utilisez pas "+" dans append!
Utilisez des clés composites dans Java Maps.
Utiliser le plugin Findbugs dans Eclipse
Comment utiliser InjectorHolder dans OpenAM
Comment utiliser les classes en Java?
Utiliser la complétion dans Eclipse sur Mac
Solution de contournement d'adresse déjà utilisée (Windows)
Utilisez-vous Stream en Java?
[Cloud9] Adresse déjà utilisée [Solution]
JSON en Java et Jackson Part ③ Incorporer JSON dans HTML et l'utiliser à partir de JavaScript
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 2-Programmation)
[Docker] Utiliser des variables d'environnement dans Nginx conf
Étude de Java 8 (API de date dans le package java.time)
Utiliser des opérateurs de comparaison d'inégalités dans MyBatis SQL
Utiliser docker dans un environnement proxy sur ubuntu 20.04.1
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
Utilisez "Rhino" qui exécute JavaScript en Java
Utiliser la méthode de requête DynamoDB avec Spring Boot
Comment utiliser les variables d'environnement dans RubyOnRails
Je veux utiliser @Autowired dans Servlet
Comprendre en 5 minutes !! Comment utiliser Docker
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment assembler JSON directement dans Jackson
Procédure d'utilisation de JConsole avec Cognos Analytics
Comment utiliser ExpandableListView dans Android Studio