使用数据库 @Entity 类进行 REST 暴露?

mem*_*und 3 java rest spring

@Entity
class MyEntity {
   //some properties to be explosed to REST, some not
}
Run Code Online (Sandbox Code Playgroud)

我有一些数据库类,我想通过REST使用来公开它们spring。

是否建议DTO为每个数据库类创建一个,复制需要公开的所有属性。

因为肯定有些字段(例如 )id永远不应该通过休息而可用。但是这些字段也许可以进行相应的注释,以便在 REST 提供期间忽略它们?

如果 DTO 只是用作从数据库复制字段的普通数据容器,那么现在编写 DTO 是否仍然是明智的?

6to*_*ton 5

我在做决定时可以考虑的几点:

反对持久性和 Web 服务通用模型的争论

  1. 在许多应用程序中,编写其余服务是为了向您提供完全构造的对象,而不是真正的数据规范化视图。例如,您的休息服务可能会返回带有部门对象的 Employee 对象,而您的数据库模型只有一个部门 id
  2. 一个模型中的修改不会影响另一个模型。例如,您决定将持久性模型中的字符串更改为整数,您仍然可以将其保留为休息服务中的字符串
  3. 您可能在其余模型中拥有一些属性,这些属性在持久性模型中没有意义,反之亦然
  4. 如果您要分发模型 jar(如客户端 API),那么它最终可能会依赖于您的持久性框架,而您的客户可能不希望/不支持该框架。

支持持久性和 Web 服务通用模型的参数

  1. 避免每次交互都复制/克隆数据
  2. 当某个属性被添加到一个模型中而在另一个模型中被遗忘时,避免重复维护或可能出现的问题

根据我的经验,如果您正在创建专门供您自己的应用程序(例如 UI)使用的服务并且对这些服务有严格的控制,那么您可能会使用通用模型

但是,如果其余 API 旨在更广泛使用并延长使用寿命,我会使用单独的模型。您可以使用 spring 的 beanutils 来轻松将模型从一种格式转换为另一种格式。请参阅此处的示例