Jackson désérialisation problème pour ZonedDateTime
J'ai le champ suivant dans une classe que j'utilise lors de la désérialisation d'un service que je suis consommant.
private ZonedDateTime transactionDateTime;
Le service, je suis la consommation peut retourner une Date ou DateTime à l'aide du modèle: yyyy-MM-dd'T'HH:mm:ss.SSSZ
Permettez-moi de donner 2 exemples de ce que les retours de service:
- 2015-11-18T18:05:38.000+0200
- 2015-11-18T00:00:00.000+0200
Tout d'abord on travaille bien, le dernier causes suivantes exception levée lors de la désérialisation:
java.temps.format.DateTimeParseException: Texte
'2015-11-18T00:00:00.000+0200" ne peut pas être analysée au niveau de l'index 23
Que j'utilise;
- Printemps De Démarrage 1.3.1
- Jackson 2.6.4 (avec JSR310 module inclus)
Cela représente une coutume de la désérialisation de classe?
OriginalL'auteur tunix | 2016-01-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser les annotations comme:
ou
Pour personnaliser la façon dont Jackson analyse des Dates. Des Sérialiseur et Deserializer doit s'étendre JsonSerializer et JsonDeserializer. Par exemple:
OriginalL'auteur Ricardo Vila
Plus haut dans le code, j'ai été en utilisant le champ avec
@JsonFormat
annotation, mais de retirer ce que j'ai pensé qu'il fallait, pour la sérialisation seulement comme la Javadoc suggèrent.S'est avéré que j'avais besoin d'ajouter que l'annotation. Et le vrai problème est que la 3ème partie de la réponse du service était en effet mal (il manquait un élément wrapper dans le XML), qui a causé la deserialisation à l'échec. L'erreur était:
Le champ est écrit comme ci-dessous:
Aussi j'ai dû ajouter
@JsonRootName("transaction")
à la classe de ce domaine parce que l'objet est enveloppée dans une collection.Constants.DATETIME_FORMAT
aaaa-MM-jj PAS'HH:mm:ss.SSSZ
Merci, mais cela n'a pas fonctionné pour moi, finalement, j'ai régler mon problème en écrivant personnalisé sérialiseur et deserializer pour ZonedDateTime classe.
Avez-vous le JSR310 dépendance sur votre classpath?
Oui, et je l'utilise ZonedDatetime. Serializations fonctionne très bien, mais la désérialisation finit UTC zonedDateTime objets
OriginalL'auteur tunix
jackson désérialiser, par défaut, par passer le fuseau horaire infor et l'utilisation du ctx fuseau horaire pour overrride ,qui tous ISO8601 se termine à l'UTC
cette fonctionnalité peut être désactivée ,si vous êtes sur le printemps
printemps.jackson.la désérialisation.ADJUST_DATES_TO_CONTEXT_TIME_ZONE=false
OriginalL'auteur Jiajun Cui