Java spring mvc控制器中的无限json序列化

Java spring mvc控制器中的无限json序列化,java,json,spring,hibernate,jpa,Java,Json,Spring,Hibernate,Jpa,我有以下映射: 1. 以及以下dao: public Set<UserContent> getAllContent() { Session session = sessionFactory.getCurrentSession(); return new HashSet<UserContent>(session.createCriteria(UserContent.class).list()); } 结果: HTTP状态500-

我有以下映射:

1.
以及以下dao:

 public Set<UserContent> getAllContent() {
        Session session = sessionFactory.getCurrentSession();
        return new HashSet<UserContent>(session.createCriteria(UserContent.class).list());
    }
结果:

HTTP状态500-无法写入JSON:未能延迟初始化 角色集合:com.terminal.domain.TerminalUser.companys,否 会话或会话已关闭(通过引用链: java.util.HashSet[0]->com.terminal.domain.UserContent[“user”]->com.terminal.domain.TerminalUser[“companys”]; 嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:未能延迟 初始化角色的集合: com.terminal.domain.TerminalUser.companys,未启动任何会话或会话 闭合(通过参考链: java.util.HashSet[0]->com.terminal.domain.UserContent[“user”]->com.terminal.domain.TerminalUser[“companys”])

附笔。 我已经阅读了下面的流行答案,但我无法解决我的问题-请帮助


自Jackson 2.0以来,您可以使用
@JsonIdentityInfo
。 检查

已更新

...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class Content {
    ...
}

...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class UserContent {
    ...
}
更新: 关于无限递归。

你有双向关系,对吗?想象一下json转换了您的 内容实体类,则它具有userContent字段和 UserContent实体类它也有一个内容字段,然后它将 结果无限递归这就是为什么您将@JsonIgnore放在 UserContent字段忽略该字段以避免无限递归。-第二

我打赌你有
私人上市公司在内容实体类中

我赌输了。XD:))

基于这一行

HTTP Status 500 - Could not write JSON: failed to lazily initialize a collection of role: com.terminal.domain.TerminalUser.companys, 
只需在
private List companys中将fetchType设置为Eager
或只是使用Hibernate.initialized()初始化它


有关更多说明,请参阅此链接

UserContent有TerminalUser字段,TerminalUser有List,但我不明白它与JsonIgnorethats有什么关系。为什么你会得到lazyinitialization异常。顺便说一句,你没有初始化TerminalUser对象上的公司列表。@jsonIgnore用于忽略实体类中的某些字段,这也是用来避免
无限递归
。你得到了lazyinitialization异常,因为json试图转换对象/实体类上的所有相关字段,而json发现列表尚未初始化。如果你不需要
列表
,只需放置@JsonIgnore alsoI,我几周前刚刚遇到同样的问题,这就是我发现的。是的,你知道这个问题,但它是在添加注释@JsonIgnoreCan后才出现的。你能提供更详细的答案吗?
import com.fasterxml.jackson.annotation.JsonIgnore;

public class Content {
    ...
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "content", cascade = CascadeType.ALL)
    @JsonIgnore        //added this annotation
    UserContent userContent;
    ....
...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class Content {
    ...
}

...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class UserContent {
    ...
}
HTTP Status 500 - Could not write JSON: failed to lazily initialize a collection of role: com.terminal.domain.TerminalUser.companys,