2016-12-27 5 views
1

Создание интернет-магазина. Мне нужно сгенерировать json, который представляет дерево категорий, но когда Im генерирует его, он получает StackOverflowError. Категория Entity:StackOverflowError при генерации дерева json

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


@ManyToOne 
@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; 
} 

я думаю, его потому, что ребенок получает родитель и родителю получить ребенок. Но я не могу разместить @JsonIgnore аннотацию, потому что тогда он будет писать только список родителей без детей или всех детей без родителей, должен быть способ генерации json

ответ

0

разрешение было очень простым, StackOverflowErrorwas потому что ребенок генерировал 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; 
} 
Смежные вопросы