Sto utilizzando la libreria descritta the Jackson Datatype JSR310 page ma ho ancora difficoltà a farlo funzionare.Deserializzazione di LocalDateTime con il modulo Jackson JSR310
Ho configurato il seguente fagiolo:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
return mapper;
}
Quando chiamo il mio API REST l'output formato della data è yyyy-MM-dd'T'HH:ss.SSSSSS
, per esempio 2015-04-11T00:10:38.905847
. Questo viene gestito dal mio codice AngularJS bene.
Quando si desidera inviare qualcosa all'API REST, la data viene indicata come yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
, ad es. 2015-04-09T08:30:00.000Z
Jackson continua a lamentarsi della "Z" alla fine. Se guardo lo LocalDateTimeDeserializer
nella documentazione utilizza lo DateTimeFormatter.ISO_LOCAL_DATE_TIME
che si riduce a ISO_LOCAL_DATE'T'ISO_LOCAL_TIME
e indica che non ha alcuna zona di sostituzione.
quindi ho pensato che avrei dovuto impostare il DateFormat
sul ObjectMapper
Sto creando:
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
return mapper;
}
Ma questo non fa nulla. L'ho modificato in qualcosa di semplice come yyyy-MM-dd
ma la data serializzata è rimasta nel formato precedente e anche la deserializzazione non è stata modificata.
Cosa sto facendo di sbagliato qui per farlo funzionare? Il formato della data nel mio codice JavaScript è, per quanto ne so il formato ISO 8601 ...
Penso che potrebbe funzionare se si passa a ZoneDateTime. –
@AlexeyGavrilov, che funziona davvero, grazie. Se lo invii come risposta, lo contrassegnerò come corretto. Ancora strano che l'impostazione di dateFormat sullo stesso objectmapper non abbia assolutamente alcun effetto per quanto riguarda la serializzazione/deserializzazione ma usare ZonedDateTime è abbastanza semplice :-) – Mekswoll
Il DateFormat di ObjectMapper è solo per il supporto java.util.Date integrato, I indovina. Passare un valore con un'indicazione del fuso orario a un LocalDateTime è un odore- Istantaneo o OffsetDateTime (o anche ZonedDateTime) è più applicabile. – araqnid