2011-05-27 9 views
1

J'ai le JSON suivant, je reçois d'un appel REST:Jackson Désérialisation Problème

"socialConnectionsData" : { 
    "friends" : [ { 
    "friend" : { 
     "firstname" : "John", 
     "lastname" : "Doe" 
    } 
    }] 
} 

Ma classe actuelle ressemble à ceci:

public class SocialConnectionsData { 
private List<Friend> friends; 

public List<Friend> getFriends() { 
    return friends; 
} 

public void setFriends(List<Friend> friends) { 
    this.friends = friends; 
}  
} 

Cependant, je reçois une exception Jackson indiquant que " friend "est un champ non reconnu. Comment aurais-je une collection d'amis et maintenais le type d'ami?

Répondre

1

On dirait que vous avez un nom de propriété supplémentaire là-dedans. Jackson attend JSON comme celui-ci pour correspondre à vos objets:

"socialConnectionsData" : { 
    "friends" : [ { 
     "firstname" : "John", 
     "lastname" : "Doe" 
    }] 
} 

Vous ne devriez pas avoir à tout faire pour maintenir le type d'ami parce que votre liste est déclarée avec celle en tant que paramètre générique.

Si vous voulez aller dans l'autre sens et faire vos objets correspondent à la JSON, alors vous aurez besoin d'un niveau supplémentaire d'indirection comme ceci:

public class SocialConnectionsData { 
    private List<FriendWrapper> friends; 

    public List<FriendWrapper> getFriends() { 
     return friends; 
    } 

    public void setFriends(List<FriendWrapper> friends) { 
     this.friends = friends; 
    }  
} 

public class FriendWrapper { 
    private Friend friend; 

    public Friend getFriend() { 
     return friend; 
    } 

    public void setFriend(Friend friend) { 
     this.friend = friend; 
    } 
} 
+0

Dans ce cas, je ne cherche pas à ce que JSON corresponde à ma structure d'objet, mais l'inverse. Je tente de créer une structure d'objet pour correspondre au JSON renvoyé puisque je ne peux pas modifier la réponse JSON. Dans ce cas, le JSON est généré par XStream. –

+0

Tout droit ... J'ai mis à jour ma réponse pour montrer comment aller d'une façon ou d'une autre ... soit mettre à jour les classes pour correspondre au JSON ou mettre à jour le JSON pour correspondre aux classes. J'espère que cela pourra aider! – stevevls

1

Parce que la propriété est "amis" pas "ami"?

1

Votre JSON doit correspondre à la structure de votre objet, et Le message d'erreur indique le problème: votre objet de niveau principal (SocialConnectionsData) n'a pas la propriété "socialConnectionsData". Le nom de la classe est sans importance.

Donc, soit vous devriez laisser tomber plus à l'extérieur "socialConnectionsData" ou utiliser l'objet wrapper comme:

class Wrapper { 
    public SocialConnectionsData socialConnectionsData; // and/or setter to set it 
} 

et se lier à elle. Cela ferait correspondre JSON et la structure de l'objet.

Questions connexes