【问题标题】:Ignore the Jackson JsonIdentityInfo during serialization在序列化过程中忽略 Jackson JsonIdentityInfo
【发布时间】:2015-07-11 13:01:51
【问题描述】:

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

例如:

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

带有id:6 的第二个对象没有完整的innerobject,而是使用@JsonIdentityInfo 忽略其余部分(因为我们已经有了它)

专注于 JacksonIdentityInfo(服务器端),而不是像潜在副本中指出的那样专注于客户端,但事实并非如此。这是杰克逊,不是格森。

【问题讨论】:

标签: java spring serialization jackson gson


【解决方案1】:

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

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

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

至于如何配置 Spring 以使用它我不知道,但您可能希望将 ObjectMapper (MyNoObjectIdMapper extends ObjectMapper) 子类化并使其在构造函​​数上自行配置。

【讨论】:

  • 谢谢,最后我只是想把 Gson 换成 Jackson(这很容易)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2023-04-11
  • 1970-01-01
  • 2014-08-04
  • 2012-02-01
  • 2013-04-11
  • 2016-11-21
相关资源
最近更新 更多