Spring Data Restを用いてCRUDおよびSwagger UIを作成する方法をご紹介します。
目次
条件
- Spring Tool Suite 4
- Spring Boot 2.5.0
- h2
- gradle
プロジェクトの作成
STSのパッケージエクスプローラーで、右クリック > 新規 > Spring スターター・プロジェクトを選択します。
名前に適当な値(ここではswaggerTest)を入力し、次へボタンを押します。
プロジェクトの依存関係で、以下を選択して完了ボタンを押します。
- Spring Data JPA
- H2 Database
- Rest Repositories
- Lombok
Lombokとは?
アノテーションを付加することで、getter/setter、toString、コンストラクタなどを自動生成してくれるライブラリです。
以下の記事に導入手順が記載されているので参考にして下さい。
Spring Data REST API(PostgreSQL)を作成する方法
依存関係(springdoc)
依存関係の追加
build.gradle
dependencyに以下を追加します。
- implementation ‘org.springdoc:springdoc-openapi-ui:1.5.9’
- implementation ‘org.springdoc:springdoc-openapi-data-rest:1.5.9’
plugins { id 'org.springframework.boot' version '2.5.0' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-rest' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.springdoc:springdoc-openapi-ui:1.5.9' implementation 'org.springdoc:springdoc-openapi-data-rest:1.5.9' } test { useJUnitPlatform() }
依存関係の反映
build.gradleを右クリック > Gradle > Gradle プロジェクトのリフレッシュを選択します。
swagger関連のjarがプロジェクトの依存関係に追加されます。
ソース/設定ファイル等
設定ファイルの記述
application.properties
以下の内容を記述します。
Swagger UIを用いるとCRUD操作が出来てしまうため、リリース時には「false」を指定して使用できないようにします。
springdoc.swagger-ui.enabled=true
ソースの追加
modelパッケージの下に、Weatherというクラスを新規追加します。
Weather.java
package com.example.demo.model; import java.sql.Timestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import lombok.Data; @Data @Entity public class Weather { @Id @GeneratedValue private Integer id; private Integer location_id; private String name; private Integer temperature; private Integer humidity; private Timestamp date_time; }
WeatherRepository.java
repositoryパッケージの下に、WeatherRepositoryというクラスを新規追加します。
インターフェースのみを定義します。
package com.example.demo.repository; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.data.repository.PagingAndSortingRepository; import com.example.demo.model.Weather; @RepositoryRestResource public interface WeatherRepository extends PagingAndSortingRepository<Weather, Integer> { }
パッケージ構成
今回は以下のようなパッケージ構成としました。
実行
プロジェクトを右クリック > 実行 > Spring Bootアプリケーション を選択して実行します。
ブラウザで以下のURLにアクセスします。
http://localhost:8080/swagger-ui.html
Swaggerの画面が開き、CRUD処理(GET,POST,PUT,DELETE,PATCH)が作成されていることがわかります。
各種操作
データ一覧の取得
GETを展開し、Try it outボタンを押します。
Executeボタンを押します。
GETが実行され、レスポンスが返ってきます。
データが無いので、空(”weathers”: [])の結果となります。
データの追加
POSTを展開し、Try it outボタンを押します。
Request bodyに以下の値を設定し、Executeボタンを押します。
{ "location_id": 12, "name": "名古屋", "temperature": 25, "humidity": 55, "date_time": "2021-06-05T02:05:38.722Z" }
201 Createdというレスポンスが返り、登録に成功していることがわかります。
再度、データ一覧を取得すると、確かにデータが追加されていることが確認出来ます。
データの更新
先ほど追加したデータを更新します。
PUTを展開し、Try it outボタンを押します。
idには「1」を指定します。(先ほど追加したデータのIDが1であるため)
Request bodyには以下の値を設定し、Executeボタンを押します。
{ "location_id": 12, "name": "名古屋(更新)", "temperature": 28, "humidity": 33, "date_time": "2021-06-05T02:11:22.112Z" }
200 OKというレスポンスが返り、更新に成功していることがわかります。
再度、データ一覧を取得すると、確かにデータが更新されていることが確認出来ます。
データの削除
DELETEを展開し、Try it outボタンを押します。
idには「1」を指定します。(先ほど追加したデータのIDが1であるため)
EXECUTEボタンを押します。
204 No Contentというレスポンスが返り、削除に成功していることがわかります。
再度、データ一覧を取得すると、確かにデータが削除されていることが確認出来ます。
参考
springdoc-openapi v1.5.9:Getting Started
https://springdoc.org/#getting-started