2011-02-25 5 views
0

[{ "ID": "hzQ8ll", "CreationDate": "Jeu, 24 février 2011 12:53:31 GMT", "Count": 6, "Nom": "une_balise"}]Comment sérialiser cette chaîne de tableau JSON en utilisant Jackson Annotations?

l'intérieur est de type Tag donc je viens d'écrire cette classe Java:

public class Tags { 
    public List <Tag>tags; 
} 

Mais je reçois com.sun.jersey.api.client.ClientHandlerException:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.test.Tags out of START_ARRAY token 

J'utilise Jersey avec le JacksonJsonProvider li ke ceci:

ClientConfig config = new DefaultClientConfig(); 
config.getClasses().add(JacksonJsonProvider.class); 

Alors je fais juste un simple appel client Jersey:

ClientResponse response = builder.get(ClientResponse.class); 
Tags tags = response.getEntity(Tags.class); 

Toutes les idées? La plupart du temps, mes éléments les plus externes étaient associés à un nom, ce qui est nouveau pour moi. Merci pour toute aide

+0

Pouvez-vous nous montrer le code réel où vous utilisez ce? –

+0

Voir ci-dessus. J'utilise le jersey donc il n'y a pas de vrai code jackson car je laisse le fournisseur le gérer pour moi. Merci –

+0

quel est le constructeur? –

Répondre

3

Vous devez éventuellement déclarer un Tag[] au lieu d'un List<Tag>. J'ai rencontré un problème similaire avec une bibliothèque JSON différente. Il semble avoir à faire avec des difficultés introspection des conteneurs génériques.

Vous avez un étrange usage de get().

http://jersey.java.net/nonav/apidocs/1.5/jersey/com/sun/jersey/api/client/UniformInterface.html#get%28java.lang.Class%29

Retour et le type argument doit être le même.

Soit:

ClientResponse resp = builder.get(ClientResponse.class); 

ou

Tag[] resp = builder.get(Tag[].class); 

Quoi qu'il en soit, il semble tha le problème est que vos données JSON est un tableau et il est désérialisée en quelque chose qui n'est pas (Tags).

Essayez ceci directement:

Tag[] tags = response.getEntity(Tag[].class); 
+0

Merci pour la réponse rapide. J'ai changé les étiquettes de la liste en balises Tag [] et j'ai eu la même erreur. –

+0

ouais désolé pour le code. J'ai corrigé. Je comprends que je reçois un tableau JSON, donc je suppose que ma question est comment puis-je définir un objet java afin que Jackson va analyser le tableau JSON correctement? Merci –

+1

Devrait être quelque chose comme Tag [] tags = response.getEntity (Tag []. Class); ou Liste tags = response.getEntity (Liste .class); –

Questions connexes