【问题标题】:How to prevent hibernate lazy loading when using jackson with spring boot?使用带有spring boot的jackson时如何防止hibernate延迟加载?
【发布时间】:2019-01-15 00:45:58
【问题描述】:

我正在使用 spring boot、jackson 和 hibernate 作为带有休息(或多或少休息..)api 的基本后端。

现在的问题是,我想使用实体而不想使用 dto 来保持低复杂度。

问题是,当我检索带有集合的实体时,jackson 会获取东西,是的,里面有一个圆圈。

我希望能够使用 spring data、jackson 和实体类,但手动控制关联。

我不想用 JsonIgnore 或其他注解来配置它。

发送!

【问题讨论】:

  • 你能分享一些代码吗?
  • "并且不想使用 dto" - 你如何处理序列化?你不想隐藏你的代表性数据吗? DTO 不是为了让生活变得更艰难,而是为了包含您实体的基础。
  • @Dan 这是一个范围明确的小项目。没有必要。在这种情况下,DTO 只是添加了另一个代码膨胀。

标签: java spring hibernate spring-boot jackson


【解决方案1】:

有几种方法可以做到这一点

  1. 使用@JsonIgnore
  2. 使用@JsonManagedReference(类似这样)和@JsonBackReference
  3. 我的最爱 - 使用@JsonView

为了什么?

  1. 将从序列化/反序列化中排除不需要的属性
  2. 明确用于解决循环依赖序列化/反序列化
  3. 使您的有效负载尽可能小 - 这允许您选择应该为给定端点序列化哪些属性。

哪一个最适合你?

这取决于你,但从描述来看,看起来 2 是要走的路(可能与 3 结合使用) 祝你好运!

【讨论】:

    【解决方案2】:

    DTO 是用于更复杂场景的方法,尤其是在入站方面。对于更简单用例的动态过滤,我为杰克逊编写了一个插件以使用 antpath 样式过滤。可能对你有帮助:

    https://github.com/Antibrumm/jackson-antpathfilter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 2014-11-02
      • 1970-01-01
      • 2017-09-14
      • 2014-03-15
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多