在序列化期间忽略 Jackson JsonIdentityInfo
Ignore the Jackson JsonIdentityInfo during serialization
我目前在反序列化期间和序列化期间在我的应用程序中的某个时刻(在与某些客户端通信期间)使用 @JsonIdentityInfo
但我的其他一些客户端根本无法使用 @JsonIdentityInfo
, 是否可以在 spring 中的某些方法的序列化过程中忽略它?
例如:
[{id:5, innerobject:{id:1, name:"inner"}},
{id:6, innerobject:{id:1}}]
带有 id:6
的第二个对象没有完整的 innerobject
,而是使用 @JsonIdentityInfo
忽略其余部分(因为我们已经有了)
关注 JacksonIdentityInfo(服务器端),而不是像潜在重复项中指出的那样关注客户端,而事实并非如此。这是 Jackson,不是 Gson。
我认为没有简单的方法,但只要稍加修改,应该是可行的。您可以做的是创建 JacksonAnnotationIntrospector
的自定义子 class,覆盖查找 @JsonIdentityInfo
的方法,并防止它们检测注释。
似乎需要覆盖的方法是 findObjectIdInfo()
,可能还有 findObjectReferenceInfo()
。只是 return null
来自两者。
然后您可以使用 ObjectMapper
注册此内省器,使用该映射器的所有读取都将类似于删除注释。
请注意,您不能动态更改内省器:在使用前它必须是 set/changed。所以如果你想在某些上下文中启用它们,你需要使用 2 个单独的映射器。
至于如何配置Spring来使用这个我不知道,但你可能想子class ObjectMapper
(MyNoObjectIdMapper extends ObjectMapper
) 并使它在构造函数上进行自我配置。
我目前在反序列化期间和序列化期间在我的应用程序中的某个时刻(在与某些客户端通信期间)使用 @JsonIdentityInfo
但我的其他一些客户端根本无法使用 @JsonIdentityInfo
, 是否可以在 spring 中的某些方法的序列化过程中忽略它?
例如:
[{id:5, innerobject:{id:1, name:"inner"}},
{id:6, innerobject:{id:1}}]
带有 id:6
的第二个对象没有完整的 innerobject
,而是使用 @JsonIdentityInfo
忽略其余部分(因为我们已经有了)
关注 JacksonIdentityInfo(服务器端),而不是像潜在重复项中指出的那样关注客户端,而事实并非如此。这是 Jackson,不是 Gson。
我认为没有简单的方法,但只要稍加修改,应该是可行的。您可以做的是创建 JacksonAnnotationIntrospector
的自定义子 class,覆盖查找 @JsonIdentityInfo
的方法,并防止它们检测注释。
似乎需要覆盖的方法是 findObjectIdInfo()
,可能还有 findObjectReferenceInfo()
。只是 return null
来自两者。
然后您可以使用 ObjectMapper
注册此内省器,使用该映射器的所有读取都将类似于删除注释。
请注意,您不能动态更改内省器:在使用前它必须是 set/changed。所以如果你想在某些上下文中启用它们,你需要使用 2 个单独的映射器。
至于如何配置Spring来使用这个我不知道,但你可能想子class ObjectMapper
(MyNoObjectIdMapper extends ObjectMapper
) 并使它在构造函数上进行自我配置。