对于最新的稳定版本,请使用 Spring Data REST 5.0.4spring-doc.cadn.net.cn

将 Spring Data REST 添加到现有的 Spring MVC 应用程序中

如果使用 Spring Boot,则无需执行以下步骤。对于 Boot 应用程序,添加 spring-boot-starter-data-rest 会自动将 Spring Data REST 添加到您的应用程序中。

您可以将 Spring Data REST 与现有的 Spring MVC 应用程序集成。在您的 Spring MVC 配置中(很可能是在配置 MVC 资源的地方),添加一个指向负责配置 RepositoryRestController 的 Java 配置类的 bean 引用。该类的名称是 org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration。以下示例展示了如何使用 @Import 注解来添加正确的引用:spring-doc.cadn.net.cn

配置将如下所示:spring-doc.cadn.net.cn

Java
import org.springframework.context.annotation.Import;
import org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration;

@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class MyApplicationConfiguration {

  …
}
XML
<bean class="org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration"/>

当您的 ApplicationContext 遇到此 bean 定义时,它会引导启动必要的 Spring MVC 资源,以完全配置该控制器,从而导出在该 ApplicationContext 及其所有父上下文中找到的仓库。spring-doc.cadn.net.cn

关于必需配置的更多信息

Spring Data REST 依赖于若干 Spring MVC 资源,这些资源必须正确配置,才能在现有的 Spring MVC 应用程序中正常工作。我们已尽力将这些资源与您应用程序中已存在的类似资源隔离开来,但您可能仍希望通过修改这些 MVC 组件来自定义 Spring Data REST 的某些行为。spring-doc.cadn.net.cn

您应特别注意配置下一节中介绍的 RepositoryRestHandlerMappingspring-doc.cadn.net.cn

RepositoryRestHandlerMapping

我们注册了一个自定义的 HandlerMapping 实例,该实例仅响应 RepositoryRestController,并且仅当某个路径应由 Spring Data REST 处理时才生效。为了将应用程序自身处理的路径与 Spring Data REST 处理的路径区分开来,这个自定义的 HandlerMapping 类会检查 URL 路径,并判断是否有 Repository 以该名称被导出。如果有,则该自定义 HandlerMapping 类会将请求交由 Spring Data REST 处理;如果没有 Repository 以该名称被导出,它将返回 null,表示“让其他 HandlerMapping 实例尝试处理此请求”。spring-doc.cadn.net.cn

Spring Data REST 的 HandlerMapping 配置了 order=(Ordered.LOWEST_PRECEDENCE - 100),这意味着在进行 URL 路径映射时,它通常排在最前面。因此,原本由您的应用程序处理的、本应发往仓库的请求将没有机会被您的应用程序接收到。例如,如果您有一个名为 person 的仓库被导出,那么所有以 /person 开头的请求都会由 Spring Data REST 处理,而您的应用程序永远不会看到这些请求。然而,如果您的仓库以其他名称(例如 people)导出,那么对 /people 的请求将由 Spring Data REST 处理,而对 /person 的请求则由您的应用程序处理。spring-doc.cadn.net.cn