我有一个数据结构(不是我设计的,所以没有机会改变它!)。其中一个类(例如foo)包含其他类(例如bar),而bar包含数组foo。我以这种方式使用@JsonIdentityInfo
解决了这个问题:
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "object.id" )
public class Foo {
@JsonProperty
Object id;
@JsonProperty
Bar bar;
}
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "object.id" )
public class Bar{
@JsonProperty
Object id;
@JsonProperty
List<Foo> foos;
}
这适当地反序列化,但序列化不完全正确。问题是这会产生额外的ID object.id
。我想将ID
用作object.id
。如何使用杰克逊注释实现这一目标?
我想解析一个序列化:
Object Foo:
{
"id":1,
"bar":
{
"id":2,
"foos":[1]
}
}
而不是这个:
{
"id":1,
"object.id":2,
"bar":
{
"id":2,
"object.id":2,
"foos":[1]
}
}
答案 0 :(得分:0)
解决方案是在注释配置ObjectIdGenerators.PropertyGenerator.class
中使用ObjectIdGenerators.IntSequenceGenerator.class
代替@JsonIdentityInfo
。另外,必须如下所示配置范围:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Foo.class)
public class Foo {
@JsonProperty
Object id;
@JsonProperty
Bar bar;
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Bar.class)
public class Bar{
@JsonProperty
Object id;
@JsonProperty
List<Foo> foos;
}
我从Deserialize with Jackson with reference to an existing object
得到答案