将 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 注解添加正确的引用。
配置将如下所示:
import org.springframework.context.annotation.Import;
import org.springframework.data.rest.webmvc.RepositoryRestMvcConfiguration;
@Configuration
@Import(RepositoryRestMvcConfiguration.class)
public class MyApplicationConfiguration {
…
}
<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 的请求将由您的应用程序处理。