当来自不同实体类型的ID重叠时,是否可以使用ObjectIdGenerators.PropertyGenerator来使用@JsonIdentityInfo?

时间:2014-02-04 10:58:48

标签: java xml jackson

当来自不同实体类型的ID重叠时,是否可以使用ObjectIdGenerators.PropertyGenerator来使用@JsonIdentityInfo?

假设我有以下XML并希望使用Jackson 2.x反序列化它:

<foo>
  <id>3</id>
  <name>Peter</name>
  <bar>
     <id>3</id>
     <kind>dog</kind>
     <!--belongsTo>3</belongsTo-->
  </bar>
</foo>

我用@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")注释了Foo和Bar类。

反序列化失败,com.fasterxml.jackson.databind.JsonMappingException: Already had POJO for id (java.lang.String) [3]

如果bar的id为4,那么一切正常。

杰克逊对要反序列化的XML中的ID有哪些要求?我假设 - 因为Jackson知道哪个实体范围能够使用相同的id,只要它属于不同的类型。

P.S。:设置或不设置belongsTo引用(指向foo对象)似乎没有关系。

1 个答案:

答案 0 :(得分:8)

你可能已经找到了答案,但万一你没有......

您应该可以使用@JsonIdentityInfo的范围参数,即

@JsonIdentityInfo(scope=Foo.class, property="id", generator=ObjectIdGenerators.PropertyGenerator.class)
public class Foo { ... }

@JsonIdentityInfo(scope=Bar.class, property="id", generator=ObjectIdGenerators.PropertyGenerator.class)
public class Bar { ... }