Проблема десериализации Джексона - PullRequest
1 голос
/ 28 мая 2011

У меня есть следующий 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;
}    
}

Однако я получаю исключение Джексона о том, что«друг» - это непризнанное поле.Как бы я имел коллекцию друзей и поддерживать тип друзей?

Ответы [ 3 ]

1 голос
/ 28 мая 2011

Похоже, у вас там есть дополнительное имя свойства.Джексон ожидает, что 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;
    }
}
1 голос
/ 28 мая 2011

Ваш JSON должен соответствовать структуре вашего объекта, и здесь сообщение об ошибке указывает на проблему: у вашего объекта основного уровня (SocialConnectionsData) нет свойства "socialConnectionsData".Имя класса не имеет значения.

Так что либо вы должны удалить самый внешний "socialConnectionsData", либо использовать объект-оболочку, например:

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

, и привязать к нему.Это приведет к совпадению JSON и структуры объекта.

1 голос
/ 28 мая 2011

Потому что свойство "друзья", а не "друг"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...