Я создаю веб-API с помощью Джерси и JaxR и ищу способ предотвратить сериализацию GSON по циклической ссылке.Я нашел много ответов о том, что в случае отношения «родитель> ребенок» мы можем добавить ключевое слово transient
к свойству родителя, чтобы оно не было сериализовано.Однако моя ситуация не такая, и я не нашел, как добиться того, что мне нужно.
У меня есть ситуация, когда у одного пользователя есть список многих других пользователей (их друзей):
public class User {
public int id;
public String name;
public List<User> friends;
}
Теперь давайте предположим, что user1
дружит с user2
, поэтому ониоба добавлены в список друзей друг друга:
user1.friends.add(user2);
user2.friends.add(user1);
Это вызывает циклическую ссылку при сериализации (и в конечном итоге исключение StackOverflowException).Действительно, друзья пользователя user1 содержат user2, а друзья user2 содержат user1, который содержит user2 .... и так далее!
Однако я не могу просто сделать transient
свойством друзей класса User
, потому что янужны эти имена друзей и идентификаторы.Я бы предпочел, чтобы свойство друга было исключено на втором уровне сериализации (путем сериализации имени и идентификатора каждого из друзей, но не друзей друзей).
Вот пример сериализованного JSON, который я хотел бынужно:
[
{
"id":1,
"name":"user1"
"friends": [
{
"id":2,
"name": "user2"
}
]
},
{
"id":2,
"name":"user2"
"friends": [
{
"id":1,
"name": "user1"
}
]
}
]
Как мне этого добиться?
Заранее большое спасибо!