Вы можете использовать @JsonIdentityInfo
в двух классах User
и Event
таким образом:
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class User
{
private int id;
private List<Event> events;
// Getters and setters
}
... и
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class Event
{
private int id;
private List<User> users;
// Getters and setters
}
Вы можете использовать любой из ObjectIdGenerator
s в зависимости от обстоятельств. Теперь, сериализация и десериализации объектов, которые соответствуют многим для многих отображения преуспеют:
public static void main(String[] args) throws IOException
{
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
Event event1 = new Event();
event1.setId(1);
Event event2 = new Event();
event2.setId(2);
User user = new User();
user.setId(10);
event1.setUsers(Arrays.asList(user));
event2.setUsers(Arrays.asList(user));
user.setEvents(Arrays.asList(event1, event2));
String json = objectMapper.writeValueAsString(user);
System.out.println(json);
User deserializedUser = objectMapper.readValue(json, User.class);
System.out.println(deserializedUser);
}
Надеется, что это помогает.
Спасибо. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю строку из вызова REST API. Пользовательский объект выглядит примерно так: {"_ id": "51f1f8acf3ce41b062000005", "events": [{"_id": "51f1fccef3ce41b062000007", "users": [{"_id": "51f1f8acf3ce41b062000005"}],}]}. запрос возвращает текущего пользователя, список событий и пользователей на мероприятии. Я использовал ObjectIdGenerators.PropertyGenerator.class, свойство = "_ id", который работает. Но поскольку пользовательский объект _id повторяется в массиве событий, я получаю исключение. У меня уже был POJO для id через цепочку ссылок: models.User ["events"] -> models.Event ["users"] -> models.User ["_ id "] – rOrlig
Хм. Образцы кода в моем ответе должны идеально работать нормально. Но если вы столкнулись с проблемами с свойством ID, вы можете попробовать использовать разные значения 'property' в аннотации' @ JsonIdentityInfo' в 'User.java' и' Event.java' (например, 'property =" userId "и 'property =" eventId "' соответственно). – Jackall