我有以下映射:
public class Content {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "content_id", unique = true, nullable = false)
private Long contentId;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "content", cascade = CascadeType.ALL)
UserContent userContent;
....
}
@Entity
@Table(name="user_content")
public class UserContent {
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "content"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "content_id", unique = true, nullable = false)
private Long contentId;
@OneToOne(fetch = FetchType.EAGER)
@PrimaryKeyJoinColumn
Content content;
}
和以下道:
public Set<UserContent> getAllContent() {
Session session = sessionFactory.getCurrentSession();
return new HashSet<UserContent>(session.createCriteria(UserContent.class).list());
}
当在控制器方法中返回此道的结果时,我看到无限递归json:
[{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":""","内容":{"userContent":{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":""","内容":{"userContent":{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":""","内容":{"userContent":{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":""","内容":{"userContent":{"contentId": 1,"name":"DSC_0029. JPG","版主状态":"IN_PROGRESS","版主评论":"","内容":{"userContent"
我尝试如下更改映射:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Content {
...
@OneToOne(fetch = FetchType.LAZY, mappedBy = "content", cascade = CascadeType.ALL)
@JsonIgnore //added this annotation
UserContent userContent;
....
结果:
HTTP状态500-无法写入JSON:未能延迟初始化角色com的集合。航空站领域终端用户。公司,没有关闭任何会话或会话(通过引用链:java.util.HashSet[0]-
我已经阅读了下面的流行答案,但我无法解决我的问题-请帮忙。
Jackson JSON和Hibernate JPA问题的无限递归
更新:关于无限递归。
你有双向关系,对吗?想象一下json转换你的Content实体类,然后它有一个userContent字段,在UserContent Entity类中它也有一个内容字段,然后它会导致无限递归,这就是为什么你把@JsonIgnore放在你的UserContent字段中忽略该字段以避免无限递归。-秒
我打赌你有私人名单
我赌输了。XD:))
基于这一行。
HTTP Status 500 - Could not write JSON: failed to lazily initialize a collection of role: com.terminal.domain.TerminalUser.companys,
只需在私有列表中将fetchType设置为Eager
有关更多说明,请参阅此链接。会话未关闭时lazyinitializationexception
从Jackson 2.0开始,您可以使用@JsonIdtyInfo
。检查留档
已更新
...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class Content {
...
}
...
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class UserContent {
...
}
我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?
我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦
我正在从事一个SpringMVC项目,我需要完成的任务之一是让用户在POST请求中发送一个JSON数据字符串。我知道Spring将使用Jackson对对象反序列化JSON,但如果我尝试以下方法: 我只是返回HTTP 400错误请求(“客户端发送的请求在语法上不正确”)。 如何获取客户端作为字符串发送的原始JSON?
我正在使用Spring形式。我只需要得到Staemap作为响应,但我得到的是整个jsp页面作为响应。
问题内容: 我正在阅读一本书,并在有关控制器的一章中谈到渲染的内容,对于JSON,它有一个类似这样的示例,但没有详细介绍,因此我无法弄清楚该示例所适合的整体情况: 还有使用JSONP和回调函数的示例: 有人可以解释这些吗? 问题答案: 通常,您将返回JSON的原因之一是: A)您正在将部分/全部应用程序构建为单页应用程序(SPA),并且需要客户端JavaScript能够提取其他数据而无需完全重新加
我知道对无限列表进行排序是不可能的,但我正试图为n个数的倍数的无限递增列表写一个定义。 我已经有这个功能了 它返回n的无限倍数列表。但现在我想构建一个函数,给定一个返回列表中所有数字的倍数的无限递增列表。所以函数