Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC Json解析限制的最佳解决方案_Java_Json_Spring_Spring Mvc - Fatal编程技术网

Java Spring MVC Json解析限制的最佳解决方案

Java Spring MVC Json解析限制的最佳解决方案,java,json,spring,spring-mvc,Java,Json,Spring,Spring Mvc,我有一个使用Spring、Hibernate和返回JSON的控制器的项目。当然,我的模型包含使用JPA注释定义hibernate关系的列表等,因此,例如,我有用户,其中包含他们自己的一组挑战,同样,挑战也包含拥有它的用户 不幸的是,我的JSON中嵌入的集合似乎有很多问题 例如,通过这种设置(用户拥有挑战,挑战有所有者),我可以很好地返回挑战。我可以很好地返回一个用户。但是当我试图返回一个挑战列表时,一切都失败了!我从Jmeter测试中收到以下错误: 错误500服务器错误 我相信这意味着Jacks

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

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

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

错误500服务器错误

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

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

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

编辑:

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


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

您可以尝试flexjson(Spring Roo使用)或gson(google开发)

您可能有一个递归循环(根据DwB的评论):用户包含一个挑战列表,每个挑战列表包含一个用户,其中包含一个挑战列表等等。解析器(或整个服务器)不喜欢这样。您应该使用注释和


您可以阅读如何使用这些注释和。我在自己的一些项目中使用过它们,如果正确实现,它们会工作得很好。

用列表解析GSON似乎很简单


只是猜测,但JSON解析器可能不喜欢递归循环。您的递归循环是User->Challenge->User->Challenge。。。这听起来可能会解决我的问题。我来看看!我发现了另一个问题。你说的每句话都是对的,但对我来说,这并不是全部。我把我的发现添加到问题中。