- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 JSON 的了解有限,因此希望您能为我指出正确的方向。
我正在尝试发布一个对象(库),但这会由于无限递归而引发异常
public class Library{
private List<Book> books= new
ArrayList<Book>();
//omitting rest of attributes, constructor,
and getter/setters
}
public class Book{
private List<Author> authors= new
ArrayList<Author>();
//omitting rest of attributes, constructor,
and getter/setters
}
public class Author{
private Book book;
//omitting rest of attributes, constructor,
and getter/setters
}
如您所见,这会导致无法序列化的无限递归:
Library -> Book -> Author -> Book -> Author...
这设计得很糟糕,但我无法选择更改模型。
我尝试使用 JsonManagedReference
和 JsonBackReference
来解决这个问题。
public class Library{
@JsonManagedReference(value="book")
private List<Book> books= new
ArrayList<Book>();
//omitting rest of attributes, constructor,
and getter/setters
}
public class Author{
@JsonBackReference(value="book")
private Book book;
//omitting rest of attributes, constructor,
and getter/setters
}
但是,这不起作用,我收到错误:
Caused by: java.lang.IllegalArgumentException: Can not handle managed/back reference 'book': no back reference property found from type [collection type; class java.util.List, contains [simple type, class .......model.Book]]
如果删除 @JsonManagedReference
注释并保留 BackReference
,我就能够序列化该对象。但是,序列化对象将 Author
中的 Book
实例设置为 null,导致在尝试将其保留在数据库中时出现异常。
我是否将注释放在正确的位置?有什么建议吗?
编辑:根据回复中的建议,我的注释放置错误。以下方法可以序列化对象,但作者丢失了对 Book 的引用
public class Book{
@JsonManagedReference
private List<Author> authors= new
ArrayList<Author>();
}
public class Author{
@JsonBackReference
private Book book;
}
这解决了无限递归的问题。但是,我收到 SQL 异常,因为无法插入空值。
Library -> Book -> Author X Book
作者表包含对这本书的不可为空的引用。
谢谢
最佳答案
看起来您的注释位置错误。
为什么Library
对书籍有ManagedReference
,而您却要防止Author
和Book
之间的递归?
这可能是它应该的样子:
public class Author {
@JsonBackReference
private Book book;
}
public class Book {
@JsonManagedReference
private List<Author> authors = new ArrayList<Author>();
}
而且,作者
与一本书具有一对一的关系,这肯定是一个错误的模型。从逻辑上讲,一个作者
可能拥有许多书籍
。
关于java - Jackson:JsonBackReference - 无限递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217220/
我有来自用户和角色的关系,其中角色具有“一对多”关系,而用户与“role_id”列具有“多对一”关系 当我在 Spring Boot 上使用关系时,当我使用 @OneToMany 和 @ManyToO
我正在使用 spring 4.0.1、hibernate 4.3.5、jackson 1.9.2 和 STS IDE我正在创建一个以 JSON 格式返回数据的 RESTful 网络服务当我使用 Hib
我对 JSON 的了解有限,因此希望您能为我指出正确的方向。 我正在尝试发布一个对象(库),但这会由于无限递归而引发异常 public class Library{ private List
我想知道Jackson中@JsonManagedReference和@JsonBackReference的区别? 最佳答案 @JsonManagedReference is the forward p
我正在使用 RestEasy、Jboss 7 和 EJB 3.1。我正在创建一个以 JSON 格式返回数据的 RESTful Web 服务。 问题是我有一个 @ManyToOne在序列化过程中导致无限
我有两个类: 人.java: @Entity @PrimaryKeyJoinColumn(name="owner_id") public class Person extends Owner {
非常感谢您解释我的问题。 我有 2 个实体和 1 个桥接表实体, 假设他们是团队、用户和团队用户。 团队实体: @Id @GeneratedValue(strategy = Gener
非常感谢您解释我的问题。 我有 2 个实体和 1 个桥接表实体, 假设他们是团队、用户和团队用户。 团队实体: @Id @GeneratedValue(strategy = Gener
回答 我将解决有关此博客的问题 Jackson – Bidirectional Relationships 谢谢你。 更新2 问题与 JsonBackReference 和 JsonManagedRe
在我的 Spring Data Rest 应用程序中,定义 excerptProjection 时,@JsonBackReference 将被忽略。 调用 GET/foos/{id} 时,我得到响应:
我知道@JsonIgnore和@JsonManagedReference,@JsonBackReference都是用来解决无限递归(StackOverflowError)的 code>,这两者有什么区
为了避免无限递归,我使用 @JsonManagedReference 和 @JsonBackReference 。但是在检索结果时,我只能以一种方式获得预期结果。 @ManyToMany(ca
我正在使用 Spring Boot 编写 OneToMany 关系,一个属性可以有多个 propertySale。 这是我的属性类: @Data @Getter @Entity @Table(name
我读过了 http://vard-lokkur.blogspot.com/2010/10/json-jackson-to-rescue.html http://vard-lokkur.blogspot
我是一名优秀的程序员,十分优秀!