Jackson deserialize ISO8601 fromatted date-heure dans Java8 Instant


J'essaie de désérialiser une date formatée ISO8601 en Java8 Instant en utilisant Jackson. J'ai enregistré JavaTimeModule avec ObjectMapper, désactivé WRITE_DATES_AS_TIMESTAMPS.

Cependant, si l'on essaie de désérialiser 2016-03-28T19:00:00.000+01:00 cela ne fonctionnera pas, car il semble que JavaTimeModule ne désérialise que les dates-heures formatées avec un décalage de fuseau horaire UTC (par exemple 2016-03-28T18:00:00.000 Z). J'ai ensuite essayé d'utiliser l'annotation @JsonFormat comme ceci:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")

Et comme ceci:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = JsonFormat.DEFAULT_TIMEZONE)

Cependant, aucun de ces travaux et je reçois une exception:

com.fasterxml.jackson.databind.JsonMappingException: Unsupported field: YearOfEra (through reference chain: org.example.Article["date"])

Ce qui implique que le paramètre timezone est ignoré et que date time formatter ne sait pas comment formater un Instant sans fuseau horaire.

Existe-t-il un moyen de désérialiser une chaîne ISO8601 qui n'est pas dans le fuseau horaire UTC décalé vers Java 8 Instant en utilisant Jackson et JavaTimeModule sans écrire de désérialiseur personnalisé?

Author: Kresimir Nesek, 2016-03-27

2 answers

Vous devez définir le fuseau horaire explicite via {[1] } dans votre classe modell:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date date;

(voir: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)

 19
Author: Meiko Rachimow, 2017-08-23 09:06:00

Le format "Z" ne fonctionne pas avec "+01:00" car il s'agit d'un modèle différent. JsonFormat utilise des modèles SimpleDateFormat. "Z" dans majuscules ne représente que la stricte RFC 822. Vous devez utiliser une syntaxe comme: "+ 0100", sans deux-points.

Voir: ISO 8601:2004, SimpleDateFormat modèles

 0
Author: Mick Belker - Pseudonym, 2016-06-24 07:39:17