La désérialisation LocalDateTime avec Jackson JSR310 module

Je suis en utilisant la bibliothèque décrite le Jackson Datatype JSR310 page mais je suis toujours de la difficulté à la faire fonctionner.

J'ai configuré la suite de haricot:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    return mapper;
}

Quand je l'appelle mon API REST le format de la date de sortie est yyyy-MM-dd'T'HH:ss.SSSSSS, par exemple 2015-04-11T00:10:38.905847. Ceci est prise en charge par mon AngularJS code de l'amende juste.

Lorsque je veux envoyer quelque chose à l'API REST de la date est affichée yyyy-MM-dd'T'HH:mm:ss.SSS'Z', par exemple 2015-04-09T08:30:00.000Z

Jackson continue de se plaindre de la " Z " à la fin. Si je regarde le LocalDateTimeDeserializer dans la documentation il utilise le DateTimeFormatter.ISO_LOCAL_DATE_TIME qui revient à ISO_LOCAL_DATE'T'ISO_LOCAL_TIME et il mentionne qu'il n'a pas de remplacer la zone.

Alors j'ai pensé que je devrais régler le DateFormat sur le ObjectMapper je suis de la création:

@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;
}

Mais cela ne fait rien. Je l'ai changé pour quelque chose de simple comme yyyy-MM-dd mais la date sérialisée est resté dans le format précédent et la désérialisation n'est pas affecté.

Ce que je fais mal ici pour obtenir que cela fonctionne? Le format de la date dans mon code JavaScript est, autant que je sais que le format ISO 8601...

Je pense que ça peut fonctionner que si vous passez à ZoneDateTime.
qui fonctionne réellement, merci. Si vous la présentez comme réponse, je vais le marquer comme étant correcte. Encore trouve ça bizarre que la définition de la dateFormat sur le objectmapper lui-même n'a absolument aucun effet en ce qui concerne la sérialisation/désérialisation, mais à l'aide de ZonedDateTime est assez facile 🙂
Le ObjectMapper de DateFormat est uniquement pour de l'intégré dans java.util.Le support de Date, je suppose. Le passage d'une valeur à une zone d'indication à un LocalDateTime est une odeur Instantanée ou OffsetDateTime (ou même ZonedDateTime) n'est plus applicable.

OriginalL'auteur Mekswoll | 2015-04-10