La désérialisation de JSON avec carte de la “clé” & “valeur” propriétés ne fonctionne pas avec Jackson
Questions
- Pour commencer, le sérialisé la sérialisation JSON ci-dessous un sens?
- Si oui, pourquoi ne suis-je pas l'obtention de la Carte de retour?
- Ce que je peux faire à ce sujet sur la désérialisation de côté?
La sérialisation JSON de Map<String, String> propriété (extrait):
{
"attributes": {
"entry": [
{
"key": "operating system",
"value": "GNU/Linux"
},
{
"key": "allergies",
"value": "weed"
}
]
}
}
POJO pour la désérialisation:
class Contact implements Comparable<Contact>, Serializable {
@JsonProperty("attributes")
private Map<String, String> attributes;
...
}
Les Causes de cette exception:
Thread-4889 An exception occurred during request network execution :Could not read JSON: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: libcore.net.http.FixedLengthInputStream@43822760; line: 1, column: 17] (through reference chain: com.example.model.Contact["attributes"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: libcore.net.http.FixedLengthInputStream@43822760; line: 1, column: 17] (through reference chain: com.example.model.Contact["attributes"])
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: libcore.net.http.FixedLengthInputStream@43822760; line: 1, column: 17] (through reference chain: com.example.model.Contact["attributes"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: libcore.net.http.FixedLengthInputStream@43822760; line: 1, column: 17] (through reference chain: com.example.model.Contact["attributes"])
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:126)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:147)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:76)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:484)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237)
at com.example.providers.Query$1.loadDataFromNetwork(Query.java:99)
at com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork(CachedSpiceRequest.java:45)
at com.octo.android.robospice.request.RequestRunner.processRequest(RequestRunner.java:130)
at com.octo.android.robospice.request.RequestRunner$1.run(RequestRunner.java:197)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: libcore.net.http.FixedLengthInputStream@43822760; line: 1, column: 17] (through reference chain: com.example.model.Contact["attributes"])
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:691)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:46)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:430)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:312)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:106)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:227)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.des
Les attributs de l'Objet lors de l'inspection dans le débogueur après la désérialisation:
Nouvelle inspection après la modification:
@JsonProperty("attributes")
private Map<String, List<Map<String, String>>> attributes;
Dépendances:
- com.fasterxml.jackson.core:jackson-core:2.3.0
- com.fasterxml.jackson.core:jackson-databind:2.3.0
- com.fasterxml.jackson.core:jackson-annotations:2.3.0
OriginalL'auteur joelpet | 2013-12-20
Vous devez vous connecter pour publier un commentaire.
Si nous allons convertir
Map
en json:La sortie sera:
Comme on peut le voir il n'y a pas de
key/value
.Solution
WrapperObject
Attributs
Entrée
Lanceur
De sortie:
OriginalL'auteur Maxim Shoustin