在现有的 Spring MVC 应用程序中添加 Spring Data REST
如果您使用的是 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
的请求则由你的应用程序处理。