Десериализовать самоссылающиеся объекты с Джексоном - PullRequest
3 голосов
/ 14 октября 2011

У меня есть строка JSON, которая выглядит так (упрощенно):

[
  { "id":1, "friends":[2] },
  { "id":2, "friends":[1,3] },
  { "id":3, "friends":[] }
]

Содержимое друзей - это идентификаторы других пользователей в списке.

Возможно ли как-то создатьJava-класс, подобный приведенному ниже, из JSON только с привязкой данных с использованием Jackson или мне нужен промежуточный шаг для этого?

public class User {
  private long userid;
  private List<User> friends;
// ... getters/setters

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 октября 2011

Нет полностью аннотативного способа сделать это, поэтому вам понадобится пользовательский JsonSerializer / JsonDeserializer.Jackson 1.9 добавляет две новые функции , которые могут помочь:

  • ValueInstantiators, так что вы можете добавить конструкторы для десериализатора для преобразования из базового целого числа в POJO
  • Внедрение значения такВы можете передать дополнительный объект контекста (который вам понадобится, чтобы найти идентификаторы уже десериализаторных объектов, чтобы затем преобразовать их из целого в экземпляр)

Однако я не уверен на 100%, как объединить эти две функции дляконкретный вариант использования ...

...