在 Spring Boot 中将数据库(JPA)对象与前端数据分离

Separation of database(JPA) objects from data for the frontend in SpringBoot

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

我的技术栈是:

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

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

所以我想知道数据库(jpa)对象和序列化后发送给前端的对象之间的separation/conversion通常是如何实现的

我有一些想法,但我不知道它们在现实世界中的可行性如何:

想法 1:为所有实体创建单独的前端 类,只包含必须发送到前端的数据。 但这可能会产生额外的问题,因为每个 request/answer.

中 类 之间的连续转换

想法 2:仅发送具有所有关系的“原始”对象作为 ID,并阻止所有“不需要的”数据进行序列化。 在这种情况下,前端现在必须向后端发出更多请求,以便将所有这些 ID 解析为所需数据。

想法 1 正是通常的做法。您所说的“前端类”通常称为数据传输对象(DTO),它们本质上是存储在数据库中的数据的“视图”,专门为从后端到前端传输的有效性而量身定制(通过聚合多个相关实体)和前端的易用性(显示)。

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