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...
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
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire d'écrire votre propre sérialiseur. Il suffit d'utiliser celui par défaut, mais en faire un exemple avec un autre format (le
time_zone
un), de sorte que le dépassement de la partie, c'est juste couper:Dans mon cas, j'ai un
contextResolver
comme cela afin de réaliser au niveau de la configuration:ObjectMapper
automatiquement et de gérer correctement la désérialisation. Cela est nécessaire si vous ne devez pas utiliser leObjectMapper
intsance à lire incomming chaînes, mais au lieu de travail par des choses commeRestTemplate
Hmmm. J'obtiens cette erreur quand j'ai essayé ceci: java.lang.IllegalAccessError: essayé de méthode d'accès com.fasterxml.jackson.databind.ser.std.StdSerializer.<init>(Ljava/lang/Class;)V de la classe com.fasterxml.jackson.type de données.jsr310.JavaTimeModule
pourriez-vous prendre un coup d'oeil stackoverflow.com/questions/44918021/... ? Est-il similaire? Si possible répondez s'il vous plaît.
OriginalL'auteur user1299153
Pour l'instant
LocalDateTimeDeserializer
ne semble pas respecter le format de date définie pour l'objet mappeur.Pour le faire fonctionner, vous pouvez remplacer
LocalDateTimeDeserializer
ou de passer à l'utilisationZoneDateTime
qui gère le 'Z' char à la fin.Voici un exemple:
De sortie:
JSR310Module
a été abandonné, l'utilisationJavaTimeModule
à la place.OriginalL'auteur Alexey Gavrilov
Hibernate 4, Printemps 4 - REPOS WS, Client - Printemps de Démarrage 1.5.2. Dans mon cas, j'ai utilisé au sein de l'Entité ZonedDateTime classe à la carte Timestamp dans la base de données. Hibernate ainsi que le Printemps de Démarrage RESTE fonctionne très bien. Je dois seulement ajouter des bibliothèques dans pom fichier:
Je suppose donc, que le convertisseur est mis en œuvre à l'intérieur de Printemps pour LocalDateTime.Le jackson.version est la dernière.
JSR310Module
classe ne serait pas disponible).Oui, bien sûr, mais je n'ai plus rien à faire. Objet Mappeur n'est pas nécessaire, ni l'enregistrement du module.
OriginalL'auteur hariprasad