【发布时间】:2014-01-11 06:44:09
【问题描述】:
我正在使用 SpringMVC 3.2.4,并希望使用 Jackson2 将对象序列化为 JSON 输出。
对象具有递归属性。如果我尝试使用默认的 Jackson ObjectMapper 对其进行序列化,则会出现递归错误。我意识到我可以使用@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class) 来防止递归,但是,我实际上希望递归更容易在胡子模板中解析。但是,我想限制递归级别。
是否有指定杰克逊序列化程序只递归 1 级?如果我需要创建自己的序列化程序,是否可以将其注册为仅用于特定对象类?
正如几位 cmets 所指出的,SO 上已经有另一个与这个问题密切相关的问题:Jackson JSON serialization, recursion avoidance by level defining。但是,在那个问题中,接受的答案(以及其他答案)都表明如何使用@JsonIdentityInfo 避免杰克逊的递归。在这种特殊情况下,我不想限制它。而是我想要它。但是,我只是想限制递归的深度。
此外,引用的 SO 问题提供了一些 Jackson 文档的链接;我已经有了文档,但坦率地说,杰克逊的文档还很缺乏。它们指示如何注册序列化程序,但不指示它需要如何构建。也没有任何迹象表明如何确定串行器的递归级别。最后,没有迹象表明是否/如何可以在 Spring 中为 Jackson 注册序列化程序以应用于特定类型的类。
【问题讨论】:
-
这是谷歌上“杰克逊 json 递归限制”的第一个命中,我可能会添加...
-
同意;我已经读过那个帖子了。我应该在我的问题中指出很多;将编辑以反映这一点。然而,这个问题并不相同。答案是如何避免递归。就我而言,我特别希望有递归;我只是想限制递归行为的深度。接受的响应(以及其他响应)都表明如何防止 Jackson 无限递归。
标签: json spring spring-mvc serialization jackson