正在创建在线商店。我需要生成代表类别树的 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/