java - 生成json树时出现StackOverflowError

标签 java json hibernate

正在创建在线商店。我需要生成代表类别树的 json,但是当我生成它时出现 StackOverflowError。 类别实体:

@OneToMany
@JoinColumn(name = "parent_category_id")
private List<Category> subcategories;


@ManyToOne
@JoinColumn(name = "parent_category_id")
private Category parentCategory;

Json生成方法,我从Controller发送List来表示树

    @Override
public List<Category> getCategoryTree() {
    List<Category> categories = categoryDao.findAll();
    List<Category> roots = categories.stream()
            .filter(category -> category.getParentCategory()!=null)
            .collect(Collectors.toList());
    return roots;
}

我猜这是因为 child 得到 parent , parent 得到 child 。但我不能放置 @JsonIgnore 注释,因为那样它只会写入没有 child 的 parent 列表或没有 parent 的所有 child ,是否必须有一种方法来生成 json

最佳答案

解决方案非常简单,StackOverflowError是因为子级生成父级,父级生成子级,解决方案非常简单,细节,一个注释 @JsonBackReference

实体:

    @OneToMany
@JoinColumn(name = "parent_category_id")
private List<Category> subcategories;


@ManyToOne
@JsonBackReference
@JoinColumn(name = "parent_category_id")
private Category parentCategory;

Json树生成方法:

    @Override
public List<Category> getCategoryTree() {
    List<Category> categories = categoryDao.findAll();
    List<Category> roots = categories.stream()
            .filter(category -> category.getParentCategory()==null)
            .collect(Collectors.toList());
    return roots;
}

关于java - 生成json树时出现StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41338314/

相关文章:

java - 错误 org.springframework.web.servlet.DispatcherServlet - 上下文初始化失败 org.springframework.beans.factory.BeanCreationException : Error

java - Selenium - 检查一个元素是否在另一个元素之下

java - getpathtranslated 返回 null

json - 在 Swift 中处理 json 中不同类型的元组

ios - 将 Json 与 post 请求绑定(bind)

java - Mysql表不存在/JPA注解

java.lang.IllegalStateException : Timer already cancelled when webapp redeploys on tomcat 错误

java - 错误提交响应 java.io.IOException : Broken pipe at sun. nio.ch.FileDispatcher.write0(Native Method)

java - 有没有办法在另一个注释中使用注释的值?

java - 使用 GSON 序列化时包括对象类型