当前位置: 首页 > 知识库问答 >
问题:

Spring HATEOAS中的资源是否取代了DTO?

丌官信厚
2023-03-14

我在Spring中构建了一个REST API。所以到目前为止,我只有阅读服务(GET)。为此,我使用Spring HATEOAS添加了引用子元素的链接。

现在我想添加一些书写REST服务。通常在REST服务中使用DTO,然后将这些DTO映射到域模型

所以我的问题是:我们能像下面的例子那样使用Spring HATEOAS的资源,而不使用DTO吗?还是资源用于其他用途,而我仍然需要DTO?

@PostMapping
public ResponseEntity<String> saveProduct(@RequestBody ProductResource product) {
  ...
}

共有1个答案

阳文轩
2023-03-14

我想说,Spring HATEOAS并没有取代DTO:它构建在DTO之上。因此,您可以让DTO类扩展ResourceSupport或用Resource包装它

自2019年9月下旬发布Spring HATEOAS 1.0.0以来,资源支持和资源

表示模型

ResourceSupport/资源/资源/页面资源类组从来没有真正感觉到恰当的名称。毕竟,这些类型实际上并没有显示资源,而是可以通过超媒体信息和启示来丰富的表示模型。以下是新名字与旧名字的对应关系:

  • ResourceSupport现在是RepresentationModel

然而,重要的是保持域模型与应用编程接口模型解耦。

表示应用程序域的模型和表示API处理的数据的模型是(或者至少应该是)不同的关注点。在应用程序域模型中添加、删除或重命名字段时,不要破坏API客户端。

当您的服务层在域/持久性模型上运行时,您的API控制器应该在一组不同的模型上运行。例如,随着域/持久性模型的发展以支持新的业务需求,您可能希望创建API模型的新版本以支持这些更改。随着新版本的发布,您可能还希望弃用旧版本的API。当事情被解耦时,这是完全可能实现的。

为了最大限度地减少将域模型转换为应用编程接口模型的样板代码(反之亦然),您可以依赖MapSTRt等框架。您还可以考虑使用Lombok为您生成getters、setters、equals()hashcode()toString()方法。

 类似资料:
  • 我有一个Java桌面应用程序,其中的图形用户界面是用Swing设计的。在我们知道之后,我们已经用JavaFX取代了图形用户界面。 “6.JavaFX是否正在取代Swing,成为Java SE的新客户机UI库?是的。然而,在可预见的将来,Swing仍将是Java SE规范的一部分,并包含在JRE中。一方面,Swing在现有的Java桌面应用程序中被广泛使用,但它依赖于旧的体系结构,这需要一定的专业知

  • 问题内容: 我在安装SciPy时遇到了麻烦,最近发现了Conda,尤其是在我正在开发的Heroku应用程序上。 使用Conda,您可以创建与virtualenv十分相似的环境。我的问题是: 如果我使用Conda,它将取代对virtualenv的需求吗?如果没有,如何将两者一起使用?是否在Conda中安装virtualenv或在virtualenv中安装Conda? 我还需要使用点子吗?如果是这样,

  • 不管错误情况如何,使用资源尝试是否总是关闭资源?我的意思是考虑以下代码: 会一直关闭吗?我读过Oracle文档,其中说: 无论try语句是正常完成还是突然完成,它都将关闭 因此无论程序正常运行还是抛出异常,它都将起作用。但是,类似或崩溃的情况怎么办?我知道这些条件对块不起作用。那么,使用资源尝试失败的条件是否存在? 这只是我请求的好奇心,谁能说明这一点吗?

  • 问题内容: 我们正在使用加载属性信息。我们的属性文件已经变得非常庞大,我们正在考虑将主属性文件分成几个子模块。有可能实现这一目标吗? 让我知道? 问题答案: 首先,我想知道为什么您选择了。给出问题的表达方式后,您似乎不必关心本地化/国际化或捆绑文件继承。 有了它,它就变得异常容易,因为它实现了反过来又提供了一种合并另一张地图的方法。开球示例: 如果您真的坚持使用,则最好的选择是创建一个自定义,在该

  • 一本关于Java的初学者书中有以下代码。这本书也很好地解释了异常,并且由于我理解了异常是如何工作的,我得到了一个关于下面代码的问题。 由于某种原因,如果FileWriter类抛出异常,将不会被执行。因此,我认为关闭writer对象的最佳位置是在finally块中。甚至在此之前,我已经看到过许多这样编写的代码,其中资源将在try块本身中关闭。我认为这样做是没有意义的。只有在没有例外的情况下,资源才会

  • 但是,试图使用@path("/“)配置JAX-RS资源时,该资源被忽略,而在resources中找到的第一个文件被加载。 有没有办法防止这种情况并允许资源工作?清除meta-inf/resources时,JAX-RS资源会正确加载。 答复: