如何使用Spring Boot,Spring Data和H2 DB實現REST API
在本文中,我們將討論Kotlin。 我在Kotlin中使用Spring Boot,Spring Data和H2記憶體資料庫開發了一個非常簡單的REST API。
Kotlin和Spring Boot很好地協同工作。
您將在程式碼演練部分中注意到專案中沒有控制器和NO服務類。
這是Spring的魔力,
@RepositoryRestResource
下面將進一步解釋。
我沒有Kotlin的經驗,但我在GitHub專案中閱讀和看到的Kotlin程式碼絕對值得探索。
您可能會問的一個重要問題是:為什麼Kotlin?
為何選擇Kotlin?
-
Kotlin編譯為位元組碼,因此它可以像Java一樣執行。
-
Kotlin比Java更簡潔。
-
Kotlin的類比
Data
Java的value
類 更簡潔 。 -
預設情況下,類是final,對應於Effective Java Item 17 - 如果要使類可繼承,則 需要顯式 開啟 。
-
預設情況下,抽象類是開啟的。
-
Kotlin的一個關鍵特性是null-safety,它在編譯時乾淨地處理空值,而不是
NullPointerException
在執行時 碰到著名 的。 -
主建構函式與輔助建構函式 - 如果您需要多個建構函式,那麼只有您可以使用輔助建構函式。 否則,大多數Kotlin類都會有一個主建構函式。
-
Kotlin也可以用作指令碼語言。
-
Kotlin和Java是可互操作的,所以很容易在程式碼庫的一小部分上試用Kotlin。
-
Kotlin使用積極型別推斷來確定未宣告型別的值和表示式的型別。 這減少了相對於Java的語言冗長度。
-
Google完全支援Kotlin與他們的Android作業系統一起使用。
以下兩點參考維基百科:
-
“根據JetBrains的部落格,Kotlin被亞馬遜網路服務,Pinterest,Coursera,Netflix,Uber和其他公司使用.Corda是由知名銀行財團(如高盛,富國銀行,摩根大通)開發的分散式賬本,德意志銀行,瑞士銀行,匯豐銀行,法國巴黎銀行,法國興業銀行(SociétéGénérale),其程式碼庫中有超過90%的Kotlin。“
-
根據谷歌的說法,Kotlin已被幾家主要開發商採用 - 例如Expedia,Flipboard,Pinterest,Square等 - 用於他們的Android製作應用程式。
程式碼演練
這個例子的專案程式碼可以在我的 Kotlin Github Repo 上找到 ,演示了一個使用Kotlin和Spring Boot的簡單REST API
克隆 - .git
-
科特林
-
春季啟動
-
春季資料
-
H2記憶體資料庫
-
搖籃
瞭解build.gradle
org.jetbrains.kotlin:kotlin-gradle-plugin
編譯Kotlin源和模組。
org.jetbrains.kotlin:kotlin-allopen
-
這是他有趣的部分。
在Kotlin中,預設情況下,所有課程都是
最終的
。
現在,為了使類可繼承,您必須使用open關鍵字進行批註。
而且,問題在於許多其他庫,如Spring,測試庫(Mockito等),這需要類和方法成為非最終的。
在Spring中,這些類主要包括
@Configuration
類和
@Bean
方法。
這裡的規則很簡單;
你需要註釋
@Configuration
和
@Bean
方法來標記它們是開放的,但這種方法很乏味且容易出錯,因此Kotlin提出了編譯器外掛,透過這種依賴使用
和
自動化這個過程
。
org.jetbrains.kotlin:kotlin-noarg
apply plugin: 'kotlin-jpa'
為了能夠使用Kotlin不可變類,我們需要啟用Kotlin JPA外掛。
它將為任何使用@Entity註釋的類生成no-arg建構函式,
apply plugin: 'kotlin'.
要定位JVM,需要應用Kotlin外掛:
apply plugin: 'kotlin-spring'
。
這是Spring Kotlin整合所必需的
編譯器選項
Spring可空性註釋為整個Spring API提供了對Kotlin開發人員的null安全性,具有在編譯時處理與null相關的問題的優勢。
可以透過
-Xjsr305
使用strict選項
新增
編譯器標誌
來啟用此功能
。
並且,它還配置Kotlin編譯器以生成Java 8位元組碼。
compileKotlin {
kotlinOptions {
freeCompilerArgs = [ “ - Xjsr305 = strict” ]
jvmTarget = “1.8”
}
}
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
我
是Kotlin標準庫的Java 8變體。
compile('com.fasterxml.jackson.module:jackson-module-kotlin')
一個
用於科特林和資料類的序列化/反序列化DDS支援。
compile("org.jetbrains.kotlin:kotlin-reflect")
我
是Kotlin反射庫。
Spring Boot Gradle外掛自動使用Kotlin Gradle外掛上宣告的Kotlin版本,因此未在依賴項部分明確定義該版本。
所有剩餘的條目都是不言自明的。
Kotlin程式碼
Spring Boot應用程式
/src/main/kotlin/com.xp.springboot.kotlin.SpringBootKotlinRestApiApplication.kt
注意上面缺少的分號。
只有擁有@ Bean時才需要開啟和關閉類的大括號。否則,需要一個類
name
。
Runapplication
是一個頂級的功能。
建立資料類
然後,我們透過使用科特林資料類,其目的是為了儲存資料,並自動提供建立我們的模型
equals()
,
hashCode()
,
toString()
,
componentN()
功能,和
copy()
。
此外,您可以在同一資料類中定義多個實體。
Var
類似於一般變數,在Kotlin中被稱為可變變數,可以多次分配。
還有另一種型別:
val
它
類似於常量變數,在Kotlin中被稱為不可變的,只能初始化一次。
此外,它
val
是隻讀的,您不能顯式寫入
val
。
建立儲存庫
是的,只有一個單行程式來定義Spring Data curd儲存庫的儲存庫介面。
這裡有趣的Spring註釋是
RepositoryRestResource
。
這是透過新增
spring-boot-starter-data-rest
依賴項來實現的。
如果你注意到, 沒有控制器,也沒有服務。 此專案在啟用HATEOAS的情況下公開以下REST端點。
GET
-
http:// localhost:8080 / parkrun / runners
POST
- http:// localhost:8080 / parkrun / runners
GET
- http:// localhost:8080 / parkrun / runners / 2
DELETE
- http:// localhost:8080 / parkrun / runners / 1
這是神奇的
@RepositoryRestResource
。
應用於
collectionResourceRel
定義自定義資源標籤,否則,註釋將根據模型類名稱(
/parkRunners
)
使用預設值
。
在執行時,Spring Data REST
將自動建立此介面的實現。
然後,它將使用
@RepositoryRestResource
註釋來指導Spring MVC並在其中建立RESTful端點
/parkRunners
。
執行應用程式
在Gradle clean build之後準備好jar後,使用以下命令執行應用程式:
java -jar SpringBootKotlinRestAPI-0.0.1-SNAPSHOT.jar
並點選
GET上
的URL
。
以下是對響應的看法:
{
“_links”:{
“跑步者”:{
“href”:“http:// localhost:8080 / parkrun / runners”
},
“個人資料”:{
“href”:“http:// localhost:8080 / parkrun / profile”
}
}
}
/runners
在GET上
點選URL
。
這是你的回答:
{
“_embedded”:{
“跑步者”:[
{
“firstName”:“NEERAJ”,
“lastName”:“SIDHAYE”,
“性別”:“M”,
“runningClub”:“RUNWAY”,
“totalRuns”:“170”,
“_links”:{
“自我”:{
“href”:“http:// localhost:8080 / parkrun / runners / 1”
},
“parkRunner”:{
“href”:“http:// localhost:8080 / parkrun / runners / 1”
}
}
}
]
},
“_links”:{
“自我”:{
“href”:“http:// localhost:8080 / parkrun / runners”
},
“個人資料”:{
“href”:“http:// localhost:8080 / parkrun / profile / runners”
}
}
}
接下來,選擇配置檔案URL並檢視您使用的內容
/profile/runners
:
{
“阿爾卑斯山”:{
“版本”:“1.0”,
“描述符”:[
{
“id”:“parkRunner-representation”,
“href”:“http:// localhost:8080 / parkrun / profile / runners”,
“描述符”:[
{
“name”:“firstName”,
“type”:“SEMANTIC”
},
{
“name”:“lastName”,
“type”:“SEMANTIC”
},
{
“名字”:“性別”,
“type”:“SEMANTIC”
},
{
“名字”:“runningClub”,
“type”:“SEMANTIC”
},
{
“名字”:“totalRuns”,
“type”:“SEMANTIC”
}
]
},
{
“id”:“get-runners”,
“名字”:“跑步者”,
“型別”:“安全”,
“rt”:“#parkRunner-representation”
},
{
“id”:“創造跑步者”,
“名字”:“跑步者”,
“type”:“UNSAFE”,
“rt”:“#parkRunner-representation”
},
{
“id”:“patch-parkRunner”,
“名字”:“parkRunner”,
“type”:“UNSAFE”,
“rt”:“#parkRunner-representation”
},
{
“id”:“get-parkRunner”,
“名字”:“parkRunner”,
“型別”:“安全”,
“rt”:“#parkRunner-representation”
},
{
“id”:“delete-parkRunner”,
“名字”:“parkRunner”,
“type”:“IDEMPOTENT”,
“rt”:“#parkRunner-representation”
},
{
“id”:“update-parkRunner”,
“名字”:“parkRunner”,
“type”:“IDEMPOTENT”,
“rt”:“#parkRunner-representation”
}
]
}
}
希望這有助於您更好地理解Kotlin中REST API的快速開發。 快樂的編碼!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2220401/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用JBang構建Spring Boot Rest API教程Spring BootRESTAPI
- 重拾後端之Spring Boot(四):使用JWT和Spring Security保護REST API後端Spring BootJWTRESTAPI
- 結合DDD和Spring Boot實現基於REST API的併發控制 -DZone JavaSpring BootRESTAPIJava
- 使用Spring Boot REST API進行測試驅動開發Spring BootRESTAPI
- 使用Spring Boot和Kafka Streams實現CQRSSpring BootKafka
- 如何在spring boot 使用 gitlab的ApiSpring BootGitlabAPI
- 使用 Spring Security JWT 令牌簽名實現 REST API 安全性SpringJWTRESTAPI
- Swagger 與 Spring Boot REST API 整合詳解SwaggerSpring BootRESTAPI
- Spring Boot:整合Spring Data JPASpring Boot
- Spring Data JPA REST Query CriteriaSpringREST
- 使用Spring Boot、Kotlin和OpenFeign實現型別安全API測試Spring BootKotlin型別API
- 使用Spring Boot實現模組化Spring Boot
- Spring Boot中實現乾淨API響應Spring BootAPI
- 如何實現Spring Boot和Quartz整合? - Nguyen Phuc HaiSpring BootquartzAI
- 使用 Spring Boot 3.2 和 CRaC 實現更快啟動Spring Boot
- 使用Spring Data JDBC實現DDD聚合SpringJDBC
- 如何實現自己的Spring Boot StarterSpring Boot
- Spring Data Jpa APISpringAPI
- 使用Spring Session實現Spring Boot水平擴充套件SessionSpring Boot套件
- 使用Spring Boot實現的GraphQL示例Spring Boot
- 使用Spring Boot實現事務管理Spring Boot
- Spring Boot學習3:web篇(中)-Spring boot Rest學習Spring BootWebREST
- Spring Boot with Spring Data JPA (1) - ConceptSpring Boot
- Spring Boot使用過濾器和攔截器分別實現REST介面簡易安全認證Spring Boot過濾器REST
- Spring Data JPA(二):SpringBoot整合H2Spring Boot
- Spring Boot 參考指南(使用RestTemplate呼叫REST服務)Spring BootREST
- Spring Boot 中使用 Java API 呼叫 ElasticsearchSpring BootJavaAPIElasticsearch
- Spring Boot 中使用 Java API 呼叫 luceneSpring BootJavaAPI
- 如何使用Spring Projections和Join實現DTO?SpringProject
- Spring Boot 和 Thymeleaf 實現 Java 版 HTMXSpring BootJava
- 使用JWT實現Spring Boot令牌認證JWTSpring Boot
- 使用Spring Boot實現訊息佇列Spring Boot佇列
- 使用Spring Boot實現分散式事務Spring Boot分散式
- Spring Boot (五)Spring Data JPA 操作 MySQL 8Spring BootMySql
- 在Spring Boot中實現API閘道器與路由Spring BootAPI路由
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- 如何使用Spring Boot的ProfilesSpring Boot
- Spring boot restful api demoSpring BootRESTAPI