Java 使用@JsonIdentityInfo的Jackson序列化不会向没有属性的对象添加标识信息
更新:我已经删除了原来的代码,因为它只是混乱,只有简化的代码需要在这里。如果你想看到更多关于我正在做的事情的细节,可以在编辑历史记录中找到 我有一个数据结构,我正试图用Jackson序列化。此结构中的一个项是POJO,它的存在只是为了促进引用它的不同项之间的通信。因此,重要的是,他们持有相同的参考,而不是不同的 问题在于,尽管类上有适当的Java 使用@JsonIdentityInfo的Jackson序列化不会向没有属性的对象添加标识信息,java,json,jackson,Java,Json,Jackson,更新:我已经删除了原来的代码,因为它只是混乱,只有简化的代码需要在这里。如果你想看到更多关于我正在做的事情的细节,可以在编辑历史记录中找到 我有一个数据结构,我正试图用Jackson序列化。此结构中的一个项是POJO,它的存在只是为了促进引用它的不同项之间的通信。因此,重要的是,他们持有相同的参考,而不是不同的 问题在于,尽管类上有适当的@JsonIdentityInfo注释,但不会生成@id属性。如果我向类中添加一个序列化属性,那么@id属性就可以正常生成。但我不希望这个对象实际拥有任何属性:
@JsonIdentityInfo
注释,但不会生成@id
属性。如果我向类中添加一个序列化属性,那么@id
属性就可以正常生成。但我不希望这个对象实际拥有任何属性:关键是所有实例都是共享的。有没有办法强迫Jackson生成id属性,尽管对象本身没有属性
下面是一个简化的测试用例:
public class Test
{
@JsonTypeInfo(use=JsonTypeInfo.Id.MINIMAL_CLASS, include=JsonTypeInfo.As.PROPERTY)
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public static class TestObject
{
}
public static void main (String [] args) throws JsonGenerationException, JsonMappingException, IOException
{
TestObject testObject = new TestObject ();
new ObjectMapper ()
.writerWithDefaultPrettyPrinter ()
.writeValue (System.out, testObject);
}
}
运行此程序会得到以下结果:
{
"@c" : ".Test$TestObject"
}
{
"@c" : ".Test$TestObject",
"@id" : 1,
"testProperty" : 0
}
将TestObject类更改为:
@JsonTypeInfo(use=JsonTypeInfo.Id.MINIMAL_CLASS, include=JsonTypeInfo.As.PROPERTY)
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public static class TestObject
{
private int testProperty;
public int getTestProperty ()
{
return testProperty;
}
public void setTestProperty (int testProperty)
{
this.testProperty = testProperty;
}
}
给出了结果:
{
"@c" : ".Test$TestObject"
}
{
"@c" : ".Test$TestObject",
"@id" : 1,
"testProperty" : 0
}
这更接近我想要的,但我不希望生成“testProperty”。我怎样才能摆脱它?如果我只是用@JsonIgnore
对其进行注释,我们将返回到第一个结果。这是一个问题,显然现在已经在git回购协议中得到了修复,修复计划将进入2.3.1版