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