Java Spring-HATEOAS与Spring-Data-Rest

Java Spring-HATEOAS与Spring-Data-Rest,java,spring,spring-data-rest,hateoas,spring-hateoas,Java,Spring,Spring Data Rest,Hateoas,Spring Hateoas,问题是,SpringHateOAS和SpringDataREST之间有什么区别 我觉得两者都可以做同样的事情,Spring数据Rest(作为Spring数据的一部分)似乎更有活力 什么时候使用一个或另一个?Spring HATEOAS提供了通用的抽象(表示模型、链接类、构建指向Spring MVC控制器的链接的API等),以简化使用Spring MVC构建超媒体驱动的REST API。因此,您可以将它与SpringMVC一起使用,手动构建这些服务 Spring Data REST使用Spri

问题是,SpringHateOAS和SpringDataREST之间有什么区别

我觉得两者都可以做同样的事情,Spring数据Rest(作为Spring数据的一部分)似乎更有活力


什么时候使用一个或另一个?

Spring HATEOAS提供了通用的抽象(表示模型、链接
类、构建指向Spring MVC控制器的链接的API等),以简化使用Spring MVC构建超媒体驱动的REST API。因此,您可以将它与SpringMVC一起使用,手动构建这些服务

Spring Data REST使用Spring HATEOAS自动公开Spring数据存储库管理的实体的资源,并利用超媒体特性进行分页,链接实体等,因此它涵盖了基本内容的80%用例,并允许您在以后使用手动实现的控制器选择性地添加更复杂的流程


要了解这一点,请随意查看示例项目。
Order
实例的处理完全由springdatarest完成(通过一些小的调整来实现业务约束)。整个支付逻辑然后手动实现,因为流程不属于CRUD类别,因为我们实际上需要实现某些步骤和协议来完成订单。同样,代码是,带有一些附加视觉效果的幻灯片可以在上找到。

我选择在我的项目中同时使用这两种幻灯片。一层控制器是用Spring数据REST构建的。另一层控制器是@RestController(spring-wevmvc)。在这个层中,我使用SpringHateOAS创建定制页面。 (过程是: 1.创建可分页
Pageable Pageable=new PageRequest
2.创建新页面
Page Page=new PageImpl
3.创建PagedResources
PagedResources resource=fooAssembler.toResource(page,fooAssembler)
,然后使用Jackson的ObjectMapper返回json

我找到的将这两种技术加载到上下文的解决方案是使用两个DispatcherServlet。
否则,SpringDataREST将接管控制权,无法选择使用其他控制器。(这样,我的应用程序中有两个域。一个用于DataREST,另一个用于webmvc+HATEOS).HATEOAS代表超媒体作为应用程序状态的引擎,是REST的关键之一。基本上,关键点在于使用资源表示上的链接来映射应用程序状态的有效转换。在这种情况下,服务提供商将提供应用程序的有效下一个正确状态可以通过链接访问。Spring HATEOAS是帮助在您的资源中构建Hymeridia控件的Spring项目。它是一个和Spring MVC集成的项目,您可以将其视为构建真正的RESTFull WS的Spring MVC扩展,它可以很好地支持提高您的服务表单CRUD的级别(理查森模型中的2级成熟度)到超媒体感知(理查森模型中的3级成熟度)另一方面,Spring Data Rest是一个非常好的项目,它使用Spring HATEOAS作为基本块,为您提供了一个可用作restfull ws的存储库层。在proctis中,该项目有助于减少将存储库层公开为restfull端点的经典BoliPerlent代码。我们可以说,tat是这些项目的支持者,与restfull端点截然不同。有了SpringHateoAS,您就有了一个可用于任何类型restfull端点的框架;有了SpringDataREST,您就有了一个Spring项目,该项目已经提供了一个端点和一个用于定制端点的框架


我希望这些思考能帮助您澄清这两个项目之间的差异,更好地理解如何使用其中一个项目

我想补充一点,SpringDataREST对SpringHateOAS有着明显的依赖性:这不是第二段明确指出的吗?“SpringDataREST使用SpringHateOAS…”是的,当然,我提供了链接。我也喜欢你的屏幕广播:-)对于SDR的最新版本,你可以使用
@BasePathAwareController
@RepositoryRestController
将你的自定义MVC控制器与SDR集成,而不必使用不同的
DispatcherServlet
s。