org.codehaus.jackson.map.JsonMappingException的解决方案:无限递归(StackOverflowError)

时间:2016-11-04 21:28:58

标签: java json hibernate rest resteasy

我知道那里已经有很多类似的错误 - 相信我,我最努力 - 但我根本无法解决这个问题。通常我使用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 websitethat并且认为我保存了......我尝试在两边做@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服务来修复它们,并且不要将它与我的对象混合以保持持久性。但我肯定知道如何解决这个问题......

1 个答案:

答案 0 :(得分:0)

我猜原因是导入错误了。应该是

org.codehaus.jackson