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

何时使用@RestController与@RepositoryRestResource

纪秋月
2023-03-14

我一直在研究如何将Spring与REST结合使用的各种示例。我们的最终目标是SpringHATEOAS/HAL设置

我已经看到了两种不同的方法,用于在Spring中渲染REST

>

  • 在控制器中通过@RestController

    通过存储库中的< code > @ RepositoryRestResource

    我正在努力寻找的是,为什么你会使用一个而不是另一个。当尝试实施HAL时,哪一个是最好的?

    我们的数据库后端是Neo4j。

  • 共有3个答案

    贺华容
    2023-03-14

    嗯,上面的答案在他们的上下文中是正确的,我仍然给你举了一个实际的例子。

    在许多情况下,作为 API 的一部分,我们需要提供用于根据特定条件搜索实体的终结点。现在使用JPA,您甚至不必编写查询,只需使用Spring-JPA的特定命名法创建一个接口和方法即可。要公开这些API,您将创建服务层,该层将简单地调用这些存储库方法,最后是控制器,它将通过调用服务层来公开endpoint。

    Spring在这里所做的,允许您从这些接口(存储库)公开这些endpoint,这些接口通常是对搜索实体的GET调用,并在后台生成创建最终endpoint所需的文件。因此,如果您正在使用@RepositoryRestResource,则无需创建Service/Controller层。

    另一方面,@RestController是一个专门处理json数据和rest工作的控制器。简而言之@ Controller @ response body = @ rest Controller。

    希望这有帮助。

    请参阅我的工作示例和博客:
    http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
    https://github.com/svermaji/Spring-boot-with-hibernate-no-controller

    鞠安民
    2023-03-14

    还有第三个(和第四个)选项您没有概述,即使用@BasePathAware Controller或@RepositoryRestController,具体取决于您是否执行特定于实体的操作。

    @RepositoryRestResource用于在公共存储库界面上设置选项 - 它将根据正在扩展的存储库类型(即Crud存储库/寻呼和排序存储库/等)自动创建endpoint。

    当您想要手动创建终结点,但希望使用已设置的 Spring 数据 REST html" target="_blank">配置时,将使用@BasePathAwareController和@RepositoryRestController。

    如果使用@RestController,您将创建一组具有不同配置选项的并行endpoint - 即不同的消息转换器,不同的错误处理程序等 - 但它们将愉快地共存(并且可能会引起混淆)。

    具体的留档可以在这里找到。

    邹毅
    2023-03-14

    好的,简短的故事是,您想使用@RepositoryRestSource,因为这将使用Spring JPA创建一个HATEOAS服务。

    正如您在这里看到的,添加这个注释并将其链接到Pojo,您就拥有了一个功能齐全的HATEOAS服务,而无需实现存储库方法或REST服务方法

    如果添加@RestController则必须实现要自己公开的每个方法,并且它不会将其导出为 HATEOAS 格式。

     类似资料:
    • 我正在用Spring web-flux和Reactor一起使用,对我来说,不清楚RestController方法何时返回

    • 我有一个简单的servlet如下所示: 但是只有不接收参数的servlet在工作: 作品: 不起作用: http.springframework.http.converter.HttpMessageNotreadableException:缺少必需的请求正文:public java.lang.String 为什么注释不起作用?我是不是漏掉了一个重要的片段?

    • 我想为我的一个编写一个简单的测试,并断言输入已正确映射到: 问题:如何向该servlet发送请求正文。然后再检查一下字段是否都设置正确? 这可能与此类似,但我不知道如何检查/监视已解析的DTO? @重复标记:这不是链接问题(关于如何读取响应正文字符串)的重复。我实际上是在要求进行身体测试。

    • 我有下面的restcontroller,想用< code>thedate=2016-08-08格式获取-查询控制器。 它应该自动转换为。但是我的 无法正常工作。为什么? 结果: “thedate”:无法将类型[java.lang.String]的属性值转换为属性“thedate”所需的类型[Java . time . local date];嵌套异常为org . spring framework

    • 我目前正在将React应用程序迁移到Typescript。到目前为止,它工作得很好,但是我的函数的返回类型(分别是函数组件)有一个问题。 到目前为止,我一直使用作为返回类型,现在如果组件决定不呈现任何内容,也就是返回,这就不再起作用了,因为不是的有效值。这是我旅程的开始,因为现在我搜索了web并发现应该使用,其中还包括以及其他一些可能发生的事情。这似乎是更好的赌注。 、和有什么区别? 为什么类组件

    • 问题内容: 我正在使用Spring Framework 4.0.7,MVC和Rest 我可以在以下方面安心工作: 例如: 用的方法(只是创建) 退还一些东西 工作良好 我可以用 : (我知道它与+ 相同) 例如: 用的方法(只是创建) 退还一些东西 我的问题是: 如果 出于确凿的原因 或 特定情况, 必须强制使用另一种选择 如果(1)无关紧要,则建议采用什么方法以及为什么。 问题答案: 旨在表示整