我有兩個類具有多對多關係的事件和用戶。Jackson2多對多反序列化
public class Event {
private int id;
private List<Users> users;
}
public class User {
private int id;
private List<Event> events;
}
我已閱讀@JsonIdentityInfo註釋應該幫助,但我看不到這樣的一個例子。
我有兩個類具有多對多關係的事件和用戶。Jackson2多對多反序列化
public class Event {
private int id;
private List<Users> users;
}
public class User {
private int id;
private List<Event> events;
}
我已閱讀@JsonIdentityInfo註釋應該幫助,但我看不到這樣的一個例子。
可以在兩個類User
和Event
這種方式使用@JsonIdentityInfo
:
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);
}
希望這會有所幫助。
嘗試使用 「範圍」 屬性,你JsonIdentityInfo註釋裏面:
@JsonIdentityInfo(
generator = ObjectIdGenerators.UUIDGenerator.class,
property="@UUID",
scope=YourPojo.class
)
我來到這裏, 「谷歌搜索」,所以我結束了使用@ Jackall的anwers,用少許國防部
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
這是因爲我的DTO有一個叫做「id」的屬性,就像問題中的Event和User類一樣。
謝謝。我遇到的問題是我從REST API調用收到字符串。用戶對象看起來像{「_ id」:「51f1f8acf3ce41b062000005」,「events」:[{「_id」:「51f1fccef3ce41b062000007」,「users」:[{「_id」:「51f1f8acf3ce41b062000005」}],}]}。該請求會返回當前用戶,事件列表中的事件和用戶。我已經使用了ObjectIdGenerators.PropertyGenerator.class,property =「_ id」。但是由於用戶對象_id在事件數組中重複出現,我得到一個異常已經通過引用鏈擁有POJO的id:models.User [「events」] - > models.Event [「users」] - > models.User [「_ id 「] – rOrlig
嗯。理想情況下,我的答案中的代碼示例工作正常。但是如果你面臨ID屬性的問題,你可以嘗試在User.java和Event.java的'@ JsonIdentityInfo'註釋中使用不同的'property'值(比如'property =「userId」'和'property =「eventId」'分別)。 – Jackall