Java 在序列化过程中忽略Jackson JsonIdentityInfo
我目前在反序列化期间和在我的应用程序的某个点(与某些客户端通信期间)序列化期间使用Java 在序列化过程中忽略Jackson JsonIdentityInfo,java,spring,serialization,jackson,gson,Java,Spring,Serialization,Jackson,Gson,我目前在反序列化期间和在我的应用程序的某个点(与某些客户端通信期间)序列化期间使用@JsonIdentityInfo,但我的一些其他客户端根本无法使用@JsonIdentityInfo,在spring的某些方法上序列化期间是否可以忽略它 例如: [{id:5, innerobject:{id:1, name:"inner"}}, {id:6, innerobject:{id:1}}] id为6的第二个对象没有完整的innerobject,而是使用@JsonIdentityInfo忽略其余的对象
@JsonIdentityInfo
,但我的一些其他客户端根本无法使用@JsonIdentityInfo
,在spring的某些方法上序列化期间是否可以忽略它
例如:
[{id:5, innerobject:{id:1, name:"inner"}},
{id:6, innerobject:{id:1}}]
id为6的第二个对象没有完整的innerobject
,而是使用@JsonIdentityInfo
忽略其余的对象(我们已经有了它)
关注JacksonIdentityInfo(服务器端),而不是像潜在副本中指出的那样关注客户端,事实并非如此。这是杰克逊,不是格森。我不认为有一个简单的方法,但通过一些黑客技术,这应该是可能的。您可以做的事情是创建一个JacksonAnnotationIntrospector的自定义子类,重写查找
@JsonIdentityInfo
的方法,并防止它们检测注释
似乎需要重写的方法有findobjectindinfo()
和可能的findObjectReferenceInfo()
。只需从两者返回null
然后,您可以使用ObjectMapper
注册此内省器,使用该映射器进行的所有读取操作都类似于删除注释。
请注意,您不能动态更改内省:必须在使用前设置/更改内省。因此,如果您想在某些上下文中启用它们,则需要使用两个单独的映射器
至于如何配置Spring来使用它,我不知道,但您可能想将其子类
ObjectMapper
(MyNoObjectdMapper扩展ObjectMapper
),并使其在构造函数上配置自身。可能是的重复项,但不是重复项。。。这是一个完全不同的问题。当然,这些例子都是一样的。谢谢,最后我只是把Gson撕了下来,换成了Jackson(这非常容易)