Java 使用@JsonIdentityInfo的Jackson序列化不会向没有属性的对象添加标识信息

Java 使用@JsonIdentityInfo的Jackson序列化不会向没有属性的对象添加标识信息,java,json,jackson,Java,Json,Jackson,更新:我已经删除了原来的代码,因为它只是混乱,只有简化的代码需要在这里。如果你想看到更多关于我正在做的事情的细节,可以在编辑历史记录中找到 我有一个数据结构,我正试图用Jackson序列化。此结构中的一个项是POJO,它的存在只是为了促进引用它的不同项之间的通信。因此,重要的是,他们持有相同的参考,而不是不同的 问题在于,尽管类上有适当的@JsonIdentityInfo注释,但不会生成@id属性。如果我向类中添加一个序列化属性,那么@id属性就可以正常生成。但我不希望这个对象实际拥有任何属性:

更新:我已经删除了原来的代码,因为它只是混乱,只有简化的代码需要在这里。如果你想看到更多关于我正在做的事情的细节,可以在编辑历史记录中找到

我有一个数据结构,我正试图用Jackson序列化。此结构中的一个项是POJO,它的存在只是为了促进引用它的不同项之间的通信。因此,重要的是,他们持有相同的参考,而不是不同的

问题在于,尽管类上有适当的
@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版