将 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 注解添加正确的引用

配置将如下所示

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 Data REST 依赖于几个 Spring MVC 资源,这些资源必须正确配置才能在现有的 Spring MVC 应用程序中正常工作。我们尝试将这些资源与您应用程序中可能已经存在的任何类似资源隔离开来,但您可能希望通过修改这些 MVC 组件来自定义 Spring Data REST 的某些行为。

您应该特别注意配置RepositoryRestHandlerMapping,下一节将介绍。

RepositoryRestHandlerMapping

我们注册了一个自定义的HandlerMapping实例,它只响应RepositoryRestController,并且只有当路径应该由 Spring Data REST 处理时才响应。为了将应用程序要处理的路径与 Spring Data REST 处理的路径分开,这个自定义的HandlerMapping类会检查 URL 路径,并检查是否有存储库以该名称导出。如果有,自定义的HandlerMapping类会让 Spring Data REST 处理请求。如果没有以该名称导出存储库,它将返回null,这意味着“让其他HandlerMapping实例尝试处理此请求”。

Spring Data REST HandlerMapping 的配置为order=(Ordered.LOWEST_PRECEDENCE - 100),这意味着在映射 URL 路径时,它通常是第一个。您现有的应用程序永远没有机会处理针对存储库的请求。例如,如果您有一个以person名称导出的存储库,那么所有针对您应用程序的以/person开头的请求都将由 Spring Data REST 处理,而您的应用程序永远不会看到该请求。但是,如果您的存储库以不同的名称(例如people)导出,那么对/people的请求将转到 Spring Data REST,而对/person的请求将由您的应用程序处理。