Spring HATEOAS中的资源是否可以替代DTO?

时间:2019-06-12 08:36:27

标签: java spring spring-hateoas

我在Spring中建立了REST API。因此,到目前为止,我只有阅读服务(GET)。为此,我使用Spring HATEOAS添加指向子元素的链接。

现在,我想添加一些编写的REST服务。通常,DTO用于REST服务,然后将它们映射到域模型。

所以我的问题是:我们可以像下面的示例那样仅使用Spring HATEOAS的资源而没有DTO吗?还是将资源用于其他用途,而我仍然需要DTO?

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

1 个答案:

答案 0 :(得分:2)

我会说Spring HATEOAS不会取代DTO:它建立在DTO之上。因此,您可以使DTO类扩展ResourceSupport或用Resource<T>包装。


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

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

要最大程度地减少将域模型转换为API模型(反之亦然)的样板代码,您可以依赖诸如MapStruct之类的框架。您也可以考虑使用Lombok为您生成getter,setter,equals()hashcode()toString()方法。