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"}
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")));
Le code source utilisé pour l'explication est répertorié dans git. Veuillez l'essayer.
Recommended Posts