我一直在研究如何在REST中使用Spring的各种示例。我们的最终目标是一个Spring HATEOAS/HAL
设置
我看到了在Spring中呈现REST的两种不同方法
@RestController
@RepositoryRestResource
我很难找到的是你为什么要用一种而另一种。当尝试实现HAL
时,哪一个是最好的?
我们的数据库后端是Neo4j。
发布于 2014-04-20 13:46:14
好的,所以简单地说,您希望使用@RepositoryRestResource
,因为这会创建一个带有Spring 的HATEOAS服务。
如您所见,这里添加了这个注释并将其链接到Pojo,您就有了一个功能齐全的HATEOAS服务,而不必实现存储库方法或REST服务方法。
如果您添加了@RestController
,那么您必须实现要单独公开的每个方法,而且它也不会将其导出为HATEOAS格式。
发布于 2015-11-10 18:23:10
有第三个(和第四个)选项,您还没有概述,即使用@BasePathAwareController或@RepositoryRestController,这取决于您是否正在执行特定于实体的操作。
@RepositoryRestResource用于在公共存储库接口上设置选项-它将根据正在扩展的存储库类型(即CrudRepository/PagingAndSortingRepository/etc). ),酌情自动创建端点
@BasePathAwareController和@RepositoryRestController用于手动创建端点,但希望使用已设置的Spring数据REST配置。
如果使用@RestController,您将创建一组具有不同配置选项(例如,不同的消息转换器、不同的错误处理程序等)的并行端点集,但它们将愉快地共存(可能会造成混淆)。
特定的文档可以找到这里。
发布于 2015-12-03 08:41:24
嗯,上面的答案在他们的上下文中是正确的
在许多情况下,作为API的一部分,我们需要提供端点,以便根据特定的标准搜索实体。现在使用JPA,您甚至不必编写查询,只需使用Spring的特定名称创建一个接口和方法即可。为了公开这些API,您将创建服务层,它将简单地调用这些存储库方法,最后,控制器将通过调用服务层来公开端点。
Spring在这里所做的是,允许您从这样的接口(存储库)公开这些端点,这些接口通常是调用搜索实体,并在后台生成创建最终端点所需的文件。因此,如果使用@RepositoryRestResource,则不需要创建服务/控制器层。
另一方面,@RestController是一个控制器,它作为控制器专门处理json数据和rest工作。简而言之,@Controller + @ResponseBody = @RestController。
希望这能有所帮助。
请参阅我的工作示例和博客中的相同内容:
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with-hibernate-no-controller
https://stackoverflow.com/questions/22824840
复制相似问题