杰克逊反序列化问题
问题描述:
我有以下的JSON我从一个REST调用接收:杰克逊反序列化问题
"socialConnectionsData" : {
"friends" : [ {
"friend" : {
"firstname" : "John",
"lastname" : "Doe"
}
}]
}
我现在的类看起来是这样的:
public class SocialConnectionsData {
private List<Friend> friends;
public List<Friend> getFriends() {
return friends;
}
public void setFriends(List<Friend> friends) {
this.friends = friends;
}
}
不过,我得到一个杰克逊例外指出“朋友“是一个无法识别的领域。我将如何收集好友并保持好友类型?
答
在我看来,你有一个额外的财产名称。杰克逊期待JSON像这样符合您的对象:
"socialConnectionsData" : {
"friends" : [ {
"firstname" : "John",
"lastname" : "Doe"
}]
}
你不应该需要做任何事,因为你的清单与作为通用参数宣布维持朋友的类型。
如果你想绕走另一条路,让你的对象JSON匹配,那么你就需要间接像这样一个额外的级别:
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;
}
}
答
因为房产是“朋友”而不是“朋友”?
答
你必须JSON对象的结构相匹配,并这里的错误消息确实指出了问题:您的主级别对象(SocialConnectionsData)没有属性“socialConnectionsData”。班级名称无关紧要。
因此,无论你应该最水滴“socialConnectionsData”或使用包装物,如:
class Wrapper {
public SocialConnectionsData socialConnectionsData; // and/or setter to set it
}
,并绑定到它。这将使JSON和对象结构相匹配。
在这种情况下,我没有试图让JSON匹配我的对象结构,而是反过来。我试图创建一个对象结构来匹配返回的JSON,因为我无法改变JSON响应。在这种情况下,JSON由XStream生成。 – 2011-05-31 12:40:50
好吧......我更新了我的答案,以展示如何去任何一种方式......更新类以匹配JSON或更新JSON以匹配类。希望有所帮助! – stevevls 2011-05-31 14:19:24