日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot和Spring Data REST –通过REST公开存储库

發布時間:2023/12/3 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot和Spring Data REST –通过REST公开存储库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Spring Boot和Spring Data REST,通過REST公開Spring Data存儲庫非常容易。 使用最少的代碼,您可以創建遵循HATEOAS原理的JPA實體的REST表示。 我決定重用Spring PetClinic的JPA實體(業務層)作為本文的基礎。

應用基礎

PetClinic的模型相對簡單,但是它包含一些單向和雙向關聯以及基本繼承:

此外,Spring的PetClinic為HSQLDB提供了SQL腳本,這使得在我的新應用程序中生成模式并用示例數據填充它非常容易。

項目依賴

作為配置的基礎,我使用了Spring Initializr并生成了一個基本的Gradle項目。 為了在Spring Boot應用程序中利用Spring Data REST,我添加了以下Boot Starters:

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

另外,我在項目中添加了HSQLDB依賴項:

compile("org.hsqldb:hsqldb:2.3.2")

原始項目使用org.joda.time.DateTime作為日期字段,并使用org.jadira.usertype.dateandtime.joda.PersistentDateTime將其與Hibernate持久化。 為了能夠在新項目中使用它,我需要添加以下依賴項:

compile("joda-time:joda-time:2.4") compile("org.jadira.usertype:usertype.jodatime:2.0.1")

使用API??時,我注意到盡管原始項目中的date字段使用Spring的@DateTimeFormat進行了注釋, @DateTimeFormat它們并未正確序列化。 我發現我需要使用@JsonFormatter ,因此另一個依賴項被添加到build.gradle :

compile("com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.2");

進入類路徑后,Spring Boot將通過org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration自動配置com.fasterxml.jackson.datatype.joda.JodaModule 。

請注意,如果要正確序列化Java 8日期和時間類型,則需要向項目添加Jackson數據類型JSR310依賴項。

初始化數據庫

為了初始化數據源,我在src/main/resources添加了schema-hsqldb.sql和data-hsqldb.sql文件。 最后,我將幾個屬性添加到application.properties :

spring.datasource.platform = hsqldbspring.jpa.generate-ddl = falsespring.jpa.hibernate.ddl-auto = none

現在,在應用程序啟動時,將自動拾取文件,并初始化數據源,并且由于有數據, 發現 API會容易得多!

儲存庫

Spring Data REST的一般思想是在Spring Data存儲庫的基礎上構建并自動將其導出為REST資源 。 我創建了幾個存儲庫,每個實體一個( OwnerRepository , PetRepository等)。 所有存儲庫都是從PagingAndSortingRepository擴展的Java接口。

在此階段不需要其他代碼:不需要@Controller ,不需要配置(除非需要自定義)。 Spring Boot將自動為我們配置所有內容。

運行應用程序

有了整個配置,就可以執行項目(您將在文章底部找到指向整個項目的鏈接)。 如果幸運的話,該應用程序將啟動,您可以導航到http://localhost:8080 ,它指向指向所有可用資源( 根資源 )的鏈接的集合。 響應的內容類型為。

哈爾

資源以Hypermedia樣式實現,默認情況下,Spring Data REST使用HAL和內容類型為application/hal+json來呈現響應。 HAL是一種簡單的格式,提供了一種鏈接資源的簡便方法。 例:

$ curl localhost:8080/owners/1 {"firstName" : "George","lastName" : "Franklin","_links" : {"self" : {"href" : "http://localhost:8080/owners/1"},"pets" : {"href" : "http://localhost:8080/owners/1/pets"}} }

就Spring Data REST而言,有幾種類型的資源:集合,項目,搜索,查詢方法和關聯,并且都在響應中利用了application/hal+json內容類型。

館藏和物品資源

集合資源支持GET和POST方法。 項目資源通常支持GET , PUT , PATCH和DELETE方法。 注意, PATCH應用隨請求主體發送的值,而PUT替換資源。

搜索和查找方法資源

搜索資源返回存儲庫公開的所有查詢方法的鏈接,而查詢方法資源執行通過存儲庫界面上的單個查詢方法公開的查詢。 兩者都是只讀的,因此僅支持GET方法。

為了可視化,我向OwnerRepository添加了find方法:

List<Owner> findBylastName(@Param("lastName") String lastName);

然后在http://localhost:8080/owners/search下公開:

$ curl http://localhost:8080/owners/search { "_links" : { "findBylastName" : { "href" : "http://localhost:8080/owners/search/findBylastName{?lastName}","templated" : true } } }

協會資源

Spring Data REST自動公開子資源。 關聯資源支持GET , POST和PUT方法。

并允許對其進行管理。 使用關聯時,您需要了解文本/ uri-list內容類型。 具有這種內容類型的請求包含一個或多個URI( 每個URI應該出現在一行中,并且只有一行 )要添加到關聯中的資源。

在第一個示例中,我們將研究Vet類中的單向關系:

@ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "vet_specialties", joinColumns = @JoinColumn(name = "vet_id"),inverseJoinColumns = @JoinColumn(name = "specialty_id")) private Set<Specialty> specialties;

為了將現有的專業添加到獸醫的專業集合中,必須執行PUT請求:

curl -i -X PUT -H "Content-Type:text/uri-list" -d $'http://localhost:8080/specialties/1\nhttp://localhost:8080/specialties/2' http://localhost:8080/vets/1/specialties

可以使用DELETE方法刪除關聯,如下所示:

curl -i -X DELETE http://localhost:8080/vets/1/specialties/2

讓我們看另一個例子:

// Owner @OneToMany(mappedBy = "owner", cascade = CascadeType.ALL, orphanRemoval = true) private Set<Pet> pets;// Pet @ManyToOne(cascade = CascadeType.ALL, optional = false) @JoinColumn(name = "owner_id") private Owner owner;

設置寵物主人可以通過以下請求完成:

curl -i -X PUT -H "Content-Type:text/uri-list" -d "http://localhost:8080/owners/1" http://localhost:8080/pets/2/owner

但是如何移除所有者呢? 由于必須始終為寵物設置所有者,因此在嘗試使用以下命令取消設置時,我們會收到HTTP/1.1 409 Conflict :

curl -i -X DELETE http://localhost:8080/pets/2/owner

整合測試

使用Spring Boot,可以在測試中啟動Web應用程序,并使用Spring Boot的@IntegrationTest對其進行驗證。 我們將使用RestTemplate及其Spring Boot的實現來驗證實際的REST調用,而不是使用MockMvc服務器端Web應用程序上下文( MockMvc )。

眾所周知,資源的類型為application/hal+json 。 因此實際上,將它們直接反序列化為實體對象(例如Owner )是不可能的。 相反,必須將其反序列化為org.springframework.hateoas.Resource ,以包裝實體并為其添加鏈接。 而且,由于Resource是一個通用型ParameterizedTypeReference必須使用RestTemplate 。

以下示例將其可視化:

private RestTemplate restTemplate = new TestRestTemplate();@Test public void getsOwner() {String ownerUrl = "http://localhost:9000/owners/1";ParameterizedTypeReference<Resource<Owner>> responseType = new ParameterizedTypeReference<Resource<Owner>>() {};ResponseEntity<Resource<Owner>> responseEntity =restTemplate.exchange(ownerUrl, GET, null, responseType);Owner owner = responseEntity.getBody().getContent();assertEquals("George", owner.getFirstName());// more assertions}

下一篇文章對此方法進行了很好的描述: 使用Spring RestTemplate和Super類型令牌使用Spring-hateoas Rest服務

摘要

通過幾個步驟以及Spring Boot和Spring Data REST的強大功能,我為現有PetClinic的數據庫創建了API。 使用Spring Data REST可以做更多的事情(例如自定義),除了文檔不多,與其他Spring項目相比,Spring Data REST似乎可以大大加快開發速度。 我認為,這是一個需要快速原型制作的好項目。

參考文獻

  • 源代碼
    • GitHub上的Spring Boot PetClinic API
  • 說明文件:
    • Spring Data REST
  • 文章:
    • 恢復您的JPA實體

翻譯自: https://www.javacodegeeks.com/2014/10/spring-boot-and-spring-data-rest-exposing-repositories-over-rest.html

總結

以上是生活随笔為你收集整理的Spring Boot和Spring Data REST –通过REST公开存储库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。