当来自不同实体类型的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对象)似乎没有关系。
答案 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 { ... }