我一直在研究如何在REST中使用Spring的各种示例。我们的最终目标是HATEOAS/HAL
安装Spring
我已经看到了两种在Spring中渲染REST的不同方法
通过
@RestController
控制器内通过
@RepositoryRestResource
存储库中
我在努力寻找的是为什么您会使用一个而不是另一个。尝试实施HAL
哪种方法最好?
我们的数据库后端是Neo4j。
Answers:
您尚未概述的第三个(第四个)选项是使用@BasePathAwareController或@RepositoryRestController,具体取决于您是否执行特定于实体的操作。
@RepositoryRestResource用于在公共存储库界面上设置选项-它会根据要扩展的存储库类型(即CrudRepository / PagingAndSortingRepository / etc)自动根据需要自动创建端点。
如果要手动创建端点,但要使用已设置的Spring Data REST配置,则使用@BasePathAwareController和@RepositoryRestController。
如果使用@RestController,则将创建具有不同配置选项的一组并行端点(即,不同的消息转换器,不同的错误处理程序等),但是它们会愉快地共存(并可能引起混淆)。
具体的文档可以在这里找到。
@RestController
使用与相同的路径@RepositoryRestResource
,则不会创建存储库端点。
好了,以上答案在它们的上下文中是正确的,我还是在给您一些实际的例子。
在许多情况下,作为API的一部分,我们需要提供用于根据某些条件搜索实体的端点。现在,使用JPA,您甚至不必编写查询,只需使用Spring-JPA的特定术语创建一个接口和方法。为了公开这样的API,您将创建Service层,它将简单地调用这些存储库方法,最后是Controllers,将通过调用Service层公开端点。
Spring在这里所做的事情,使您可以从这样的接口(存储库)中公开这些端点,这些接口通常是对搜索实体的GET调用,并在后台生成必要的文件以创建最终端点。因此,如果您使用的是@RepositoryRestResource,则无需构建Service / Controller层。
另一方面,@RestController是一个控制器,专门处理json数据,并作为控制器进行其余工作。简而言之@Controller + @ResponseBody = @RestController。
希望这可以帮助。
参见我的工作示例和博客以获取相同信息:
http
:
//sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with -休眠无控制器
@RepositoryRestController
从公开的存储库覆盖默认生成的默认Spring Data REST控制器。
要利用Spring Data REST的设置,消息转换器,异常处理等功能,请使用
@RepositoryRestController
注释代替标准的Spring MVC@Controller
或@RestController
例如,此控制器使用spring.data.rest.basePath
Spring Boot设置作为路由的基本路径。
注意添加,@ResponseBody
因为它错过了@RepositoryRestController
如果您没有公开存储库(标记为@RepositoryRestResource(exported = false)
),请改用@BasePathAwareController
注释
也要注意包包
ControllerLinkBuilder
不考虑Spring Data REST的基本路径,因此@RequestMapping
不应在类/类型级别使用
和
修复链接的解决方法:https : //stackoverflow.com/a/51736503/548473
更新:@RepositoryRestController
由于很多解决方法,最后我不愿使用。