生成json树时的StackOverflowError

时间:2016-12-27 02:32:18

标签: 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;
}

我猜它是因为孩子得到父母和父母得到孩子。但我不能放置@JsonIgnore注释,因为那样它只会写出没有子节点的父母列表或者没有父节点的所有子节点,是否必须有一种方法来生成json

1 个答案:

答案 0 :(得分:0)

分辨率非常简单,StackOverflowError因为child生成了paernt和parent生成子,解决方案是非常简单的细节,一个注释 @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;
}