performance - Jackson 2 : Parsing a ton of classes through JPA associations, 是否可以限制深度?

标签 performance jackson limit json

我一直在尝试使用 Jackson 2.2.2 作为 Json(反)序列化器,在工作的 Spring MVC 3.1.2 应用程序之上开发一个 RESTful 层。问题是,它对引用的了解太深了,以前加载最多需要 1 秒的页面现在只需要服务器端 22 秒。

问题是 Jackson 正在遍历每一个关联,并且需要很长时间才能加载所有内容并解析它。

我知道@JsonIgnore,但是,我宁愿有深度限制,因为如果我们有这样的说法:

My amazing explanation

如果我将 @JsonIgnore 放在 B 和 C 之间的链接上,那么序列化 A 时效果会很好,但是如果我需要序列化 ​​B 并希望 C 也序列化怎么办?我能想到的最好的方法是给序列化器一个深度限制。比方说,深度限制= 1,那么在序列化A时它不会序列化C,但在序列化B时仍然会序列化它。有什么办法可以做到这一点吗?

我已经看到了 @JsonView 注释,但它的设计目的是包含属性而不是排除它们。它可用于排除某些属性,但仅在一类级别上相关。

我需要编写自己的序列化程序吗?如果我编写自己的序列化器,有没有办法实现这样的事情?

我不认为这是不可解决的,但我找不到任何对我的情况有帮助的东西......

谢谢!

最佳答案

如果您使用 Hibernate,Jackson Hibernate 模块 ( https://github.com/FasterXML/jackson-datatype-hibernate ) 支持禁用“延迟”属性(延迟获取的集合)的加载。这将允许您限制要访问和序列化的对象图的大小。

除此之外, jackson 没有基于深度的限制;核心包对特定的域/数据模块一无所知。可以编写扩展模块来改变特定域的行为;这就是 Hibernate 模块的工作原理。也许这可用于通用的 JPA 特定功能。

关于performance - Jackson 2 : Parsing a ton of classes through JPA associations, 是否可以限制深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143195/

相关文章:

python - NumPy ufunc 在一个轴上比另一个轴快 2 倍

c# - 使用 C# Closed XML 在 excel 中合并列的性能

performance - 如何将我的结构变量放入 CPU 缓存以消除主内存页面访问时间?选项

performance - VBA 图表操作缓慢

angularjs - JsonException 未分配 _valueDeserializer

PHP-MySQL : Limit data with a specific characters

Node.js:express.json限制白名单

java - 无法使用 jackson API 将 json 字符串映射到 java 对象

java - 在运行时使用 Jackson 为多态添加 SubType 信息

wordpress - 如何修复WordPress中的 "508 Resource Limit is reached"错误?