我目前正在反序列化和序列化期间在应用程序中的某个时刻(与某些客户端通信期间)使用@JsonIdentityInfo,但是我的某些其他客户端根本无法使用@JsonIdentityInfo,在此过程中可以忽略id:6春季一些方法的序列化?

例如:

[{id:5, innerobject:{id:1, name:"inner"}},
{id:6, innerobject:{id:1}}]


具有innerobject的第二个对象没有完整的@JsonIdentityInfo,而是使用忽略其余对象(因为我们已经拥有了)

专注于JacksonIdentityInfo(服务器端),而不是专注于潜在副本中指出的客户端(不是)。这是杰克逊,而不是格森。

最佳答案

我认为没有简单的方法,但是有了一点黑客,这应该是可能的。您可以做的是创建JacksonAnnotationIntrospector的自定义子类,覆盖查找@JsonIdentityInfo的方法,并防止它们检测注释。

似乎需要覆盖的方法是findObjectIdInfo(),可能还有findObjectReferenceInfo()。只需从两者返回null

然后,您可以向ObjectMapper注册此自省者,并且使用该映射器进行的所有读取都将类似于删除注释的工作。
请注意,您不能动态更改内省:必须在使用前对其进行设置/更改。因此,如果要在某些情况下启用它们,则需要使用2个单独的映射器。

至于如何配置Spring以使用它,我不知道,但是您可能想对ObjectMapperMyNoObjectIdMapper extends ObjectMapper)进行子类化,并使其在构造函​​数上进行配置。

07-25 22:45