Sto tentando di deserializzare una data formattata ISO8601 in Java8 Instant utilizzando Jackson. Ho registrato JavaTimeModule con ObjectMapper, disattivato WRITE_DATES_AS_TIMESTAMPS.Jackson deserializza data e ora con formattazione ISO8601 in Java8 Instant
Tuttavia, se si tenta di deserializzare 2016-03-28T19: 00: 00.000 + 01: 00 non funzionerà, perché sembra che JavaTimeModule sarà deserializzare unica data volte formattati con offset di fuso orario UTC (ad es 2016-03 -28T18: 00: 00.000Z). Allora ho provato ad utilizzare @JsonFormat annotazione in questo modo:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")
E in questo modo:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = JsonFormat.DEFAULT_TIMEZONE)
Tuttavia, nessuno di questi lavori e ottengo un'eccezione:
com.fasterxml.jackson.databind.JsonMappingException: Unsupported field: YearOfEra (through reference chain: org.example.Article["date"])
che implica che il parametro timezone viene ignorato e il formattatore della data non sa come formattare un Instant senza un fuso orario.
C'è un modo per deserializzare una stringa ISO8601 che non è in fuso orario UTC rispetto a Java 8 Instant utilizzando Jackson e JavaTimeModule senza scrivere deserializzatore personalizzato?
strano, mi aspettavo questo errore 'Impossibile analizzare Data valore '2016-03-28T19: 00: 00.000 + 01: 00' (formato: "AAAA-MM-dd'T 'HH: mm: ss.SSSZ "): Data non analizzabile:" 2016-03-28T19: 00: 00.000 + 01: 00 "' e dopo aver provato il codice, ho ricevuto questo tipo di errore in entrambi i casi. Il formato non corrisponde ... l'hai provato senza annotazioni? –
o con questo modello: aaaa-MM-gg'T'HH: mm: ss.SSSXXX (vedere: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) –
Senza alcuna annotazione funziona, ma solo se l'offset è specificato come Z. Non funzionerà per +0100 o +01: 00. Ho provato il tuo formato e ottengo ancora l'eccezione Unsupported field: YearOfEra, a indicare che il formattatore del deserializer non è configurato con un fuso orario (per qualche motivo java 8 richiede TZ anche se l'offset è specificato nella stringa e Instant è completamente definito) . –