如何解决杰克逊反序列化问题
| 我从REST呼叫中收到以下JSON:\"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;
}
}
但是,我收到一个Jackson异常,指出\“ friend \”是无法识别的字段。我如何收集朋友并保持朋友类型?
解决方法
在我看来,您那里有一个额外的属性名称。杰克逊期望这样的JSON与您的对象相对应:
\"socialConnectionsData\" : {
\"friends\" : [ {
\"firstname\" : \"John\",\"lastname\" : \"Doe\"
}]
}
您不需要做任何事情来维护Friend的类型,因为您的列表是用通用参数声明的。
如果您想反过来使对象与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必须与您的Object结构匹配,并且这里的错误消息确实指出了问题:您的主级对象(SocialConnectionsData)没有属性\“ socialConnectionsData \”。班级名称无关紧要。
因此,要么将最外面的\“ socialConnectionsData \”删除,要么使用包装对象,例如:
class Wrapper {
public SocialConnectionsData socialConnectionsData; // and/or setter to set it
}
并绑定到它。这将使JSON与对象结构匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。