首页 > 解决方案 > 如何使用 Spring boot 和 MYSQL 为多级菜单列表创建嵌套 JSON?

问题描述

我一直在尝试使用 MySQL 和 Spring boot 创建多级嵌套 JSON。

我将需要这个 JSON,以便以后可以使用 jQuery 创建 HTML 菜单。

但我目前正在努力创建我的多级嵌套 JSON。

基本上,我有一个如下所示的 MYSQL 数据库:

id    categoryItem    parrent

1     car               0
2     red car           1
3     blue car          1
4     bike              0
5     yellow bike       4

列 post_parent 是将它们链接在一起的列。

我尝试使用以下 Spring 引导代码,但 JSON 输出错误。

我的实体类是这样的:

@Table(name = "category_item")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class CategoryItem implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "fa_icon")
    private String faIcon;

    @ManyToOne
    @JsonIgnoreProperties("categoryItems")
    private CategoryItem parrent;
}

我将需要一个像这样的结构的多级嵌套 JSON:

{
  "id": 1,
  "name": "car",
  "categoryItem": [
    {
      "id": 2,
      "name": "red car"
    },
    {
      "id": 3,
      "name": "blue car"
    }
  ]
}

我该怎么办!?请帮忙!

标签: mysqljsonspring-bootjpaorm

解决方案


您需要使其成为双向关系:

@Table(name = "category_item")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class CategoryItem implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "fa_icon")
    private String faIcon;

    @OneToMany(mappedBy = "parent")
    private Set<CategoryItem> categoryItems;

    @ManyToOne
    @JsonIgnoreProperties("categoryItems")
    private CategoryItem parent;
}

推荐阅读