如何使用 Spring boot 和 MYSQL 为多级菜单列表创建嵌套 JSON?

Posted

技术标签:

【中文标题】如何使用 Spring boot 和 MYSQL 为多级菜单列表创建嵌套 JSON?【英文标题】:How to create nested JSON for the multi-level menu list using Spring boot and MYSQL? 【发布时间】:2019-10-09 22:58:25 【问题描述】:

我一直在尝试使用 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"
    
  ]

我该怎么办!?请帮忙!

【问题讨论】:

【参考方案1】:

你需要让它成为双向关系:

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

【讨论】:

我试过了,但它不起作用。很多人建议使用 DTO。但我对此并不陌生。 DTO如何处理? 您需要扩展“我已经尝试过,但它不起作用”。如果你想要一个答案。

以上是关于如何使用 Spring boot 和 MYSQL 为多级菜单列表创建嵌套 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中使用 MySql 数据库查询?

如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?

如何从 html 表单中获取“日期和时间”输入并使用 Spring Boot 保存到 MySQL 数据库中?

如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?

如何通过 Spring Boot Web App 即时创建 mysql 数据库和表

如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?