为SpringBoot的前端分离数据库(JPA)对象和数据



我目前正在开发一个全栈web应用程序作为一个业余爱好项目。

我的技术堆栈是:

  • MySql数据库
  • SpringBoot RestApi后端与JPA进行数据库交互
  • Vue前端

我已经建模了数据库,并为数据库中的所有表创建了jpa实体。数据模型包括一些双向关系(多对多关系)。然后我开始为前端创建一些API端点来与之交互,但是我在决定如何序列化数据并将其发送到前端时遇到了一些问题。

在大多数教程和示例中,直接类似于数据库对象的对象被序列化,然后发送到前端。但是我不希望那样,主要是因为双向关系会产生不可序列化的递归,而且还因为不是数据库中对象的所有数据都意味着要发送到前端。

所以我想知道如何分离/转换数据库(jpa)对象和对象之间的序列化,然后发送到前端通常是实现。

我有一些想法,但我不知道它们在现实世界中是否可行。

想法1:为所有实体创建单独的前端类,这些类只包含必须发送到前端的数据。但这可能会产生额外的问题,因为在每个请求/回答中,类之间的转换是连续的。

创意二:只发送"raw"对象,将所有关系仅作为id,并且只屏蔽所有"不需要的"。来自序列化的数据。在这种情况下,前端现在必须对后端进行更多的请求,以便将所有这些id解析为所需的数据。

想法一就是通常的做法。"前端类"它们通常被称为数据传输对象(dto)它们本质上是"视图"。为从后端到前端(通过多个相关实体的聚合)传输的有效性和前端的易用性(显示)而专门定制的数据库中存储的数据。

转换的问题是一个众所周知的问题,被所谓的"映射器"成功地解决了。允许在DB实体和dto之间(半)自动转换。这种映射器的一个很好的例子是MapStruct(https://mapstruct.org/documentation/stable/reference/html/),它很好地集成了Spring和Lombok,并在IntelliJ Idea中得到支持。

最新更新