我目前正在反序列化和序列化期间在应用程序中的某个时刻(与某些客户端通信期间)使用@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以使用它,我不知道,但是您可能想对ObjectMapper
(MyNoObjectIdMapper extends ObjectMapper
)进行子类化,并使其在构造函数上进行配置。