在序列化期间忽略Jackson JsonIdentityInfo

时间:2015-05-01 16:49:32

标签: java spring serialization jackson gson

我目前在反序列化期间和在我的应用程序中的某些时间序列化期间使用@JsonIdentityInfo(在与某些客户端通信期间)但我的其他一些客户端根本无法使用@JsonIdentityInfo,在春季某些方法的序列化过程中是否忽略了它?

例如:

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

id:6的第二个对象没有完整innerobject,而是使用@JsonIdentityInfo来忽略其余对象(正如我们已经拥有的那样)

专注于JacksonIdentityInfo(服务器端),而不是像潜在重复中指出的那样关注客户端,而不是。这是杰克逊,而不是Gson。

1 个答案:

答案 0 :(得分:1)

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

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

然后,您可以使用ObjectMapper注册此introspector,并且使用该映射器的所有读取将类似于删除注释。 请注意,您无法动态更改introspector:必须在使用前设置/更改它。因此,如果要在某些上下文中启用它们,则需要使用2个单独的映射器。

至于如何配置Spring使用它我不知道,但你可能想要子类ObjectMapperMyNoObjectIdMapper extends ObjectMapper)并让它在构造函数上进行自我配置。