我知道那里已经有很多类似的错误 - 相信我,我最努力 - 但我根本无法解决这个问题。通常我使用tapestry和resteasy来提供REST服务。 Hibernate是我的持久性框架。我有一个Java对象“Obj1”和另一个Java对象“User”。用户可以拥有一些Obj1,所以我在User中有obj1的以下映射:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
private Set<obj1> obj1s;
另一方面(在Obj1中):
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "owner", referencedColumnName = "guid")
private User owner;
所以用户拥有一些Obj1,而obj1知道它的所有者。这给了我一个例外
org.jboss.resteasy.spi.UnhandledException: RESTEASY003770: Response is committed, can't handle exception
<<omitted>>
Caused by: org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)
我发现this website和that并且认为我保存了......我尝试在两边做@JsonManagedReference,@ JsonBackReference事情(我甚至翻过它们看看我是否只是注释了错误与@JsonManagedReference一起但仍然是同样的例外。我也找到了
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="guid")
我添加到双方(see here)但仍然没有(guid是两个对象的属性)。然后我找到了this并添加了
@JsonIdentityReference(alwaysAsId = true)
到集合属性但仍具有相同的效果。当然最明显的事情是使用@JsonIgnore
,在第一个链接和here上找到,但这也不起作用。现在我认为问题可能在其他地方,也许我的依赖关系不正确...但是,我使用的是com.fasterxml.jackson
- import(正如在某些帖子中建议的那样)。我的pom的相关部分是:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jsapi</artifactId>
<version>3.0.19.Final</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jaxrs_2.10</artifactId>
<version>1.3.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.0.4.Final</version>
</dependency>
<dependency>
<groupId>org.tynamo</groupId>
<artifactId>tapestry-resteasy</artifactId>
<version>0.4.0</version>
</dependency>
那么,任何人都可以给我另一个暗示或者我还能尝试做些什么吗?当然,我可以实现另一个对象,只是为了通过REST服务来修复它们,并且不要将它与我的对象混合以保持持久性。但我肯定知道如何解决这个问题......
答案 0 :(得分:0)
我猜原因是导入错误了。应该是
org.codehaus.jackson