Jackson JSON序列化 - 指定递归级别

Eri*_* B. 6 serialization spring json spring-mvc jackson

我正在使用SpringMVC 3.2.4,我希望使用Jackson2将对象序列化为JSON输出.

该对象具有递归属性.如果我尝试使用默认的Jackson ObjectMapper序列化它,我会收到一个递归错误.我意识到我可以@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class)用来防止递归,但是,我实际上希望递归使得在胡子模板中更容易解析.但是,我想限制递归级别.

反正有没有指定杰克逊序列化器只递归1级?如果我需要创建自己的序列化程序,我可以注册它,使其仅用于特定的对象类吗?

正如一些评论所指出的那样,已经存在另一个与此问题非常密切相关的问题:Jackson JSON序列化,通过级别定义来避免递归.然而,在那个问题中,接受的答案(以及其他答案)都表明如何通过使用避免杰克逊的递归@JsonIdentityInfo.在这种特殊情况下,我不打算限制它; 而我想要它.但是,我只想限制递归的深度.

此外,引用的SO问题提供了一些Jackson文档的链接; 我已经有了这些文档,但坦率地说杰克逊的文档非常缺乏.它们指示如何注册序列化程序,但不指示它是如何构造的.也没有任何迹象表明如何确定序列化器的递归级别.最后,没有迹象表明是否/如何在Spring中为Jackson注册序列化程序以应用于特定类型的类.

小智 0

您可以使用保存最大深度的线程本地整数来限制序列化深度。在递归 getter 中,根据限制检查当前节点的深度,如果达到限制则返回 null。仅当您可以根据节点的内部状态计算当前节点深度时,这才有效。

请参阅此答案中的示例代码。