将 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 的请求将由您的应用程序处理。