使用Jackson反序列化包含2个具有相同子项的对象的数组?

时间:2013-07-16 23:12:54

标签: java json jackson

我的目标是避免两次创建同一个对象。我想反序列化包含相同子对象的两个对象的数组,这是我要反序列化的JSON对象

  [
     {
        @id: 98,
        relatedPackage: {@id:99, receivedOn:1374012807237, packingTypeFk:1,…}
     },
     {
        @id: 101,
        relatedPackage: {@id:99, receivedOn:1374012807237, packingTypeFk:1,…}
     }
  ]

这是POJO

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class Package extends StampedModel {
...
}

在上一个代码中,您可以看到我将注释@JsonIdentityInfo用于实现我的目标,但它不能完成这项工作。总是我将这个数组发送到服务器,它会创建两个不同的包。

我在做什么Wrongo?

2 个答案:

答案 0 :(得分:1)

要解决这个问题,我只需要发送第一个相关的包一次,下次只发送ID号。即

[
   {
      @id: 98,
      relatedPackage: {@id:99, receivedOn:1374012807237, packingTypeFk:1,…}
   },
 {
      @id: 101,
      relatedPackage: 99
   }
]

答案 1 :(得分:0)

据我所知,“身份”信息不会强制实例身份。它只能确保符合该身份的两个对象被认为是相等的。

您可以实施custom deserializers with Jackson。然后,您还将实现类instance control(通过实例管理器,或在值类本身内)。 HTH