跳到主要内容
版本:4.4.3

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

DeepSeek V3 中英对照 Adding Spring Data REST to an Existing Spring MVC Application

备注

如果您使用的是 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 的请求则由你的应用程序处理。