Spring Data Restを用いてCRUDおよびSwagger UIを作成する方法
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
springdoc-openapi v1.5.9:Spring Data Rest support
https://springdoc.org/#spring-data-rest-support






















