Jackson deserialize ISO8601 fromatted date-time en Java8 Instant
j'essaie de désérialiser une date formatée ISO8601 en Java8 instantané en utilisant Jackson. J'ai enregistré JavaTimeModule avec L'ObjectMapper, éteint WRITE_DATES_AS_TIMESTAMPS.
cependant, si l'on essaie de desérialiser 2016-03-28T19:00:00.000+01:00 cela ne marchera pas, car il semble que JavaTimeModule ne désérialisera que les dates-heures formatées avec UTC timezone offset (e.g. 2016-03-28T18:00:00.000 Z). J'ai ensuite essayé d'utiliser @JsonFormat annotation 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, ni l'un ni l'autre 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 date time formatter ne sait pas comment formater un Instant sans timezone.
y a-t-il un moyen de desérialiser une chaîne ISO8601 qui n'est pas dans le décalage horaire UTC de Java 8 Instant en utilisant Jackson et JavaTimeModule sans écrire custom deserializer?
2 réponses
vous devez définir le fuseau horaire explicite via XXX
dans votre classe modell:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date date;
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)
Le format "Z" ne fonctionne pas avec "+01:00" c'est un modèle différent. JsonFormat utilise des motifs SimpleDateFormat. "Z" in majuscule représente uniquement la RFC 822. Vous devez utiliser la syntaxe comme: "+0100", sans deux points.