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 資源的位置),新增對 Java 配置類別的 bean 參考,該類別負責配置 RepositoryRestController。類別名稱為 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 的請求則由您的應用程式處理。