使用Jackson反序列化自引用对象



我有一个JSON字符串看起来像这样(简化):

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

好友的内容是列表中其他用户的id。

是否有可能以某种方式从JSON中创建像下面这样的Java类,只是使用Jackson的数据绑定,或者我需要一个中间步骤?

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

谢谢你的帮助。

没有完全注释的方法来做到这一点,所以您需要自定义JsonSerializer/JsonDeserializer。Jackson 1.9增加了两个可能会有所帮助的新特性:

  • ValueInstantiators,因此您可以为反序列化器添加构造函数,将基本整数转换为POJO
  • 值注入,这样你就可以传递额外的上下文对象(你需要找到已经反序列化对象的id,将它们从整数映射到实例)

然而,我不是100%确定如何结合这两个功能为特定的用例…

最新更新