如何解决无限递归(org.codehaus.jackson.map.JsonMappingException)

时间:2015-03-18 21:12:12

标签: java json hibernate jackson

当我从User调用findById方法时,会收到一个结果,但是当我尝试从webservice转换返回时,会抛出此异常:

  

org.codehaus.jackson.map.JsonMappingException:无限递归(StackOverflowError)(通过引用链:com.empsys.user.User [“locations”] - > org.hibernate.collection.internal.PersistentBag [0] - > com.empsys.contact.details.Location [ “接触”] - > com.empsys.user.User [ “位置”] - > org.hibernate.collection.internal.PersistentBag [0] - > com.empsys.contact.details.Location [ “联系”] - > com.empsys.user.User [ “位置”] - > org.hibernate.collection.internal.PersistentBag [0] - > com.empsys .contact.details.Location [ “接触”] - > com.empsys.user.User [ “位置”] - > org.hibernate.collection.internal.PersistentBag [0] - > com.empsys.contact。 details.Location [“contact”] ...

班级关系是:

类联系 - 创建此类是为了表示系统上的多种类型的联系人。

@Entity
@Table(name = "CONTACT", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "CONTACT_TYPE")
public class Contact implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="contact")
    @Column(nullable = true)
    @JsonManagedReference
    private List<Location> locations;
...

类用户 - 创建此类以表示具有特定信息的用户

@Entity
@Table(name = "USER")
@DiscriminatorValue("USER")
public class User extends Contact {
...

班级位置 - 创建此班级以表示用户和系统其他联系人

的地址
@Entity
@Table(name = "LOCATION", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Location implements Serializable {

    @ManyToOne
    @JoinColumn(name = "contact_id", nullable = false)
    @JsonBackReference
    private Contact contact;
    ...

使用的依赖关系:

  • (com.sun.jersey)jersey-json:版本1.18
  • (com.fasterxml.jackson.datatype)jackson-datatype-hibernate4:version: 2.4.0

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

我知道这是一篇相当古老的帖子,但是对于那些将来到这里的人来说,也许你应该看看this post

自Jackson 1.6起,您可以使用@JsonManagedReference and @JsonBackReference

答案 1 :(得分:0)

我有这样的问题。在我的例子中,我在创建响应JSON时不想导航的属性上使用@JsonIgnore。