【问题标题】:How to resolve infinite recursion (org.codehaus.jackson.map.JsonMappingException)如何解决无限递归(org.codehaus.jackson.map.JsonMappingException)
【发布时间】:2015-05-21 20:52:00
【问题描述】:

当我从 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["contact"]->com.empsys.user.User["locations"]->org.hibernate.collection.internal.PersistentBag[0]->com.empsys.contact .details.Location["contact"]->com.empsys.user.User["locations"]->org.hibernate.collection.internal.PersistentBag[0]->com.empsys.contact.details.Location["联系人"]->com.empsys.user.User["locations"]->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;
...

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

@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:版本: 2.4.0

谁能帮帮我?

【问题讨论】:

标签: java json hibernate jackson


【解决方案1】:

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

从 Jackson 1.6 开始,您可以使用 @JsonManagedReference and @JsonBackReference

【讨论】:

    【解决方案2】:

    我遇到过这样的问题。就我而言,我在创建响应 JSON 时不想导航的属性上使用 @JsonIgnore。

    【讨论】:

    • 我需要在这个属性中导航,但是我尝试使用@JsonIgnore 向前一步,但异常仍然发生。
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多