gpt4 book ai didi

java - Jackson:JsonBackReference - 无限递归问题

转载 作者:行者123 更新时间:2023-12-02 10:22:41 25 4
gpt4 key购买 nike

我对 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...

这设计得很糟糕,但我无法选择更改模型。

我尝试使用 JsonManagedReferenceJsonBackReference 来解决这个问题。

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,而您却要防止AuthorBook之间的递归?

这可能是它应该的样子:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com