gpt4 book ai didi

java - Spring MVC Json 解析限制的最佳解决方法

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:39 24 4
gpt4 key购买 nike

我有一个使用 Spring、Hibernate 和返回 JSON 的 Controller 的项目。当然,我的模型包含列表等,以使用 JPA 注释来定义 hibernate 关系,因此,例如,我有用户,其中包含他们拥有的一组挑战,同样,挑战包含拥有它的用户。

不幸的是,我的 JSON 中嵌入的集合似乎有很多问题。

例如,通过该设置(用户拥有挑战,挑战拥有所有者),我可以很好地返回挑战。我可以很好地返回一个用户。但是,当我尝试返回挑战列表时,一切都崩溃了!我从我的 Jmeter 测试中收到以下错误:

错误 500 服务器错误

我相信这意味着 Jackson json 解析器在设置 json 时遇到了问题。我相信这一点,因为如果我使用 @JsonIgnoreProperties({"challengesOwned"}) 那么我可以很好地返回挑战列表,因为每个单独的挑战对象不再有一个嵌入其中的列表。

这对我来说似乎很奇怪。 Jackson 真的不能在 JSON 中映射简单的嵌入式列表吗?我也遇到了一个大问题,因为我有一个使用 User 作为其键的 map ……而且似乎根本不可能将 JSON map 的键定义为嵌入式对象!

有人对我的问题有建议吗?我是否必须手动定义一些 Json 映射?有没有我不知道的简单解决方案?

编辑:

虽然 j0ntech 所说的似乎是真的,但事实证明这并不是故事的全部。似乎当 Spring 使用 Jackson 将我的一个 hibernate 实体序列化为它的 JSON 版本时, hibernate 试图延迟加载该实体的一个属性,但由于该实体当时在其事务之外(在 Controller 中) ), 它导致了一个异常,它刚刚被吞没了。

所以实际上有两个问题。我通过尝试在实际返回之前手动使用 Jackson 序列化我返回的对象来解决这个问题。这样我实际上得到了另一个问题的堆栈跟踪。

最佳答案

您可能有一个递归循环(根据 DwB 的评论):用户包含一个挑战列表,每个挑战都包含一个用户,用户又包含一个挑战列表,依此类推。解析器(或您的服务器)不喜欢那样。您应该使用注释 JsonManagedReferenceJsonBackReference .

您可以阅读有关如何使用这些注释的信息 herehere .我在我自己的一些项目中使用过它们,如果实现得当,它们会非常有效。

关于java - Spring MVC Json 解析限制的最佳解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14569767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com