我有一个使用 Spring、Hibernate 的项目,并且有返回 JSON 的控制器。自然,我的模型包含列表等使用 JPA 注释来定义休眠关系,因此,例如,我有用户,其中包含他们拥有的一组挑战,同样挑战包含拥有它的用户。
不幸的是,我的 JSON 中嵌入的集合似乎有很多问题。
例如,通过这种设置(用户拥有挑战,挑战拥有所有者),我可以很好地返回挑战。我可以很好地返回一个用户。但是,当我尝试返回挑战列表时,一切都崩溃了!我从 Jmeter 测试中收到以下错误:
错误 500 服务器错误
我相信这意味着 Jackson json 解析器在设置 json 时遇到了问题。我相信这一点,因为如果我使用 @JsonIgnoreProperties({"challengesOwned"}) 那么我可以很好地返回挑战列表,因为每个单独的挑战对象不再具有嵌入其中的列表。
这对我来说似乎很奇怪。Jackson 真的不能在 JSON 中映射简单的嵌入式列表吗?我也遇到了一个大问题,因为我有一个使用 User 作为其键的 Map ...而且似乎根本不可能将 JSON 映射的键定义为嵌入式对象!
有人对我的问题有建议吗?我是否必须手动定义一些 Json 映射?有没有我不知道的简单解决方案?
编辑:
虽然 j0ntech 所说的似乎是真的,但事实证明这并不是故事的全部。似乎当 Spring 使用 Jackson 将我的一个休眠实体序列化为它的 JSON 版本时,休眠试图延迟加载该实体的属性之一,但由于该实体当时不在其事务中(“在”控制器中) ),它导致了一个异常,它刚刚被吞没了。
所以实际上有两个问题。我通过尝试手动使用 Jackson 在实际返回它之前序列化我返回的对象来解决这个问题。这样我实际上得到了另一个问题的堆栈跟踪。