天天看點

Spring認證中國教育管理中心-Spring Data REST架構教程一

原标題:Spring認證中國教育管理中心-Spring Data REST架構教程一(Spring中國教育管理中心)

參考文檔

  1. 介紹

REST Web 服務已成為 Web 上應用程式內建的首選方法。在其核心,REST 定義了一個系統,該系統由用戶端互動的資源組成。這些資源以超媒體驅動的方式實作。Spring MVC和Spring WebFlux都為建構這些類型的服務提供了堅實的基礎。然而,即使為多域對象系統實作最簡單的 REST Web 服務原則也可能非常乏味,并會産生大量樣闆代碼。

Spring Data REST 建構在 Spring Data 存儲庫之上,并自動将它們導出為 REST 資源。它利用超媒體讓用戶端自動查找存儲庫公開的功能,并将這些資源內建到相關的基于超媒體的功能中。

  1. 入門

Spring Data REST 本身就是一個 Spring MVC 應用程式,它的設計方式使其可以輕松地與您現有的 Spring MVC 應用程式內建。現有(或未來)的服務層可以與 Spring Data REST 一起運作,隻需少量的額外工作。

3.1.将 Spring Data REST 添加到 Spring Boot 項目

最簡單的入門方法是建構一個 Spring Boot 應用程式,因為 Spring Boot 有一個适用于 Spring Data REST 的啟動器并使用自動配置。以下示例展示了如何使用 Gradle 在 Spring Boot 項目中包含 Spring Data Rest:

示例 3. 使用 Gradle 配置 Spring Boot

dependencies {

...

compile("org.springframework.boot:spring-boot-starter-data-rest")

}

以下示例展示了如何使用 Maven 在 Spring Boot 項目中包含 Spring Data Rest:

示例 4. 使用 Maven 配置 Spring Boot

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>           

...

如果您使用Spring Boot Gradle 插件或Spring Boot Maven 插件,則無需提供版本号。

當您使用 Spring Boot 時,Spring Data REST 會自動配置。

3.2.将 Spring Data REST 添加到 Gradle 項目

要将 Spring Data REST 添加到基于 Gradle 的項目,請将spring-data-rest-webmvc工件添加到編譯時依賴項,如下所示:

… other project dependencies

compile("org.springframework.data:spring-data-rest-webmvc:3.6.0")

3.3.将 Spring Data REST 添加到 Maven 項目

要将 Spring Data REST 添加到基于 Maven 的項目,請将spring-data-rest-webmvc工件添加到編譯時依賴項,如下所示:

org.springframework.data

spring-data-rest-webmvc

3.6.0

3.4.配置 Spring Data REST

要将 Spring Data REST 與現有 Spring MVC 應用程式一起安裝,您需要包含适當的 MVC 配置。Spring Data REST 配置在一個名為的類中定義,

RepositoryRestMvcConfiguration您可以将該類導入到應用程式的配置中。

如果您使用 Spring Boot 的自動配置,則不需要此步驟。當您包含

spring-boot-starter-data-rest并且在您的依賴項清單中,您的應用程式被标記為@SpringBootApplication或時,Spring Boot 會自動啟用 Spring Data REST @EnableAutoConfiguration。

要自定義配置,請注冊 aRepositoryRestConfigurer并實施或覆寫與configure…您的用例相關的-methods。

確定您還為您使用的商店配置 Spring Data 存儲庫。有關詳細資訊,請參閱相應 Spring Data 子產品的參考文檔。

3.5.Spring Data REST 的基本設定

本節介紹在配置 Spring Data REST 應用程式時可以操作的基本設定,包括:

設定存儲庫檢測政策

更改基本 URI

更改其他 Spring Data REST 屬性

3.5.1.設定存儲庫檢測政策

Spring Data REST 使用

RepositoryDetectionStrategy來确定存儲庫是否作為 REST 資源導出。的RepositoryDiscoveryStrategies列舉包括以下值:

Spring認證中國教育管理中心-Spring Data REST架構教程一

3.5.2.更改基本 URI

預設情況下,Spring Data REST 在根 URI“/”處提供 REST 資源。有多種方法可以更改基本路徑。

對于 Spring Boot 1.2 及更高版本,您可以通過在 中設定單個屬性來更改基本 URI application.properties,如下所示:

spring.data.rest.basePath=/api

使用 Spring Boot 1.1 或更早版本,或者如果您不使用 Spring Boot,您可以執行以下操作:

@Configuration

class CustomRestMvcConfiguration {

@Bean

public RepositoryRestConfigurer repositoryRestConfigurer() {

return new RepositoryRestConfigurer() {

  @Override
  public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
    config.setBasePath("/api");
  }
};           

或者,您可以将 的自定義實作注冊RepositoryRestConfigurer為 Spring bean,并確定它被元件掃描選中,如下所示:

@Component

public class CustomizedRestMvcConfiguration extends RepositoryRestConfigurer {

@Override

public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {

config.setBasePath("/api");           

上述兩種方法都将基本路徑更改為/api.

3.5.3.更改其他 Spring Data REST 屬性

您可以更改以下屬性:

3.6.啟動應用程式

此時,您還必須配置您的密鑰資料存儲。

Spring Data REST 官方支援:

彈簧資料 JPA

春季資料MongoDB

彈簧資料 Neo4j

Spring Data GemFire

Spring Data Cassandra

以下入門指南可以幫助您快速入門和運作:

這些連結指南介紹了如何為相關資料存儲添加依賴項、配置域對象和定義存儲庫。

您可以将應用程式作為 Spring Boot 應用程式(使用前面顯示的連結)運作,也可以将其配置為經典的 Spring MVC 應用程式。

通常,Spring Data REST 不會向給定的資料存儲添加功能。這意味着,根據定義,它應該适用于任何支援存儲庫程式設計模型的 Spring Data 項目。上面列出的資料存儲是我們編寫內建測試以驗證 Spring Data REST 與它們一起工作的資料存儲。

從這一點來看,您可以使用各種選項自定義 Spring Data REST。

  1. 倉庫資源

4.1.基本面

Spring Data REST 的核心功能是為 Spring Data 存儲庫導出資源。是以,要檢視并可能自定義導出工作方式的核心工件是存儲庫接口。考慮以下存儲庫接口:

public interface OrderRepository extends CrudRepository<Order, Long> { }

對于這個存儲庫,Spring Data REST 在/orders. 路徑源自被管理的域類的非大寫、複數、簡單的類名。它還為 URI 模闆下的存儲庫管理的每個項目公開一個項目資源/orders/{id}。

預設情況下,與這些資源互動的 HTTP 方法映射到CrudRepository. 在關于收藏資源和項目資源的部分中閱讀更多相關資訊。

4.1.1.存儲庫方法暴露

為某個存儲庫公開哪些 HTTP 資源主要由存儲庫的結構驅動。換句話說,資源公開将遵循您在存儲庫中公開的方法。如果您擴充CrudRepository,通常會公開公開所有 HTTP 資源所需的所有方法,我們可以預設注冊。下面列出的每個資源都将定義需要存在哪些方法,以便可以為每個資源公開特定的 HTTP 方法。這意味着,沒有公開這些方法的存儲庫——要麼根本不聲明它們,要麼顯式使用它們@RestResource(exported = false) ——不會在這些資源上公開這些 HTTP 方法。

有關如何單獨調整預設方法公開或專用 HTTP 方法的詳細資訊,請參閱自定義支援的 HTTP 方法。

4.1.2.預設狀态代碼

對于暴露的資源,我們使用一組預設狀态代碼:

200 OK: 對于普通GET請求。

201 Created:對于POST和PUT創造新的資源的請求。

204 No Content: 對于PUT、PATCH和DELETE請求,當配置設定為不傳回資源更新的響應主體 ( RepositoryRestConfiguration.setReturnBodyOnUpdate(…)) 時。如果配置值設定為包括對 的響應PUT,200 OK則為更新傳回,并201 Created為通過建立的資源傳回PUT。

如果配置值 (

RepositoryRestConfiguration.returnBodyOnUpdate(…)和RepositoryRestConfiguration.returnBodyCreate(…)) 顯式設定為null ——預設情況下是——,則使用 HTTP 接受标頭的存在來确定響應代碼。在收藏和物品資源的詳細說明中閱讀更多相關資訊。

4.1.3.資源可發現性

HATEOAS 的一個核心原則是資源應該可以通過釋出指向可用資源的連結來發現。關于如何在 JSON 中表示連結,有一些互相競争的事實上的标準。預設情況下,Spring Data REST 使用HAL來呈現響應。HAL 定義要包含在傳回文檔的屬性中的連結。

資源發現從應用程式的頂層開始。通過向部署 Spring Data REST 應用程式的根 URL 送出請求,用戶端可以從傳回的 JSON 對象中提取一組連結,這些連結表示用戶端可用的下一級資源。

例如,要發現應用程式根目錄中有哪些資源可用,請GET向根 URL發出 HTTP ,如下所示:

curl -v

http://localhost

:8080/

< HTTP/1.1 200 OK

< Content-Type: application/hal+json

{ "_links" : {

"orders" : {
  "href" : "http://localhost:8080/orders"
},
"profile" : {
  "href" : "http://localhost:8080/api/alps"
}           

結果文檔的屬性是一個對象,它由表示關系類型的鍵組成,并帶有 HAL 中指定的嵌套連結對象。

有關該profile連結的更多詳細資訊,請參閱應用程式級配置檔案語義 (ALPS)。