Spring Bootを使ったWebAPIの作成
Spring Bootを使ったWebAPIの作成
今回からSpringを使ったWebアプリ開発についての記事を書いていこうと思います。
まず初めにということで、Spring Bootを使って、簡単なWebAPIを1本作成します。
まずはこのWebAPIアプリをもとに開発フローを一通り実施してみたいと思います。
- テストコードの作成
- GitHubへのPUSH
- AWS上のEC2へのデプロイ
- ビルド/デプロイの自動化
ソースコード
本Blogで開発するソースコードはGitHubのPublic Repositoryで公開しています。
今回、開発するソースコードは以下を参照ください。
要約
- IntelliJ IDEAはインストールされていること前提
- IntelliJ IDEAで新規プロジェクトの作成
- Spring BootはInitilizerを使う
- APIを追加
- 動作確認
- テストコードの作成
- GitHubへPush
環境情報
筆者の環境は以下の通りです。
分類 | 環境 |
---|---|
PC | MacBook Air(M1, 2020) |
OS | macOS Monterey(バージョン12.3.1) |
IDE | IntelliJ IDEA 2022.2.2 (Community Edition) |
JDK | Amazon Corretto 17.0.4.1 |
Framework | Spring Framework 5.3 |
Spring Boot | Spring Boot 2.7.3 |
IntelliJ IDEAで始めるSpring Boot
前提条件
IntelliJ IDEAはインストールされているものとします。
IDEAプロジェクトの新規作成
新規にプロジェクトを作成します。
IntelliJ IDEAのFile
-> New
-> Project
から作成します。
空のプロジェクトを作成するために左メニューからはNew Project
を選択。
JDKはcorretto-17(Amazon Corretto version)
を選択。
それ以外のNameやLocationは適宜任意のものを入力して問題ありません。
Spring Bootプロジェクトの新規作成
次にSpring Bootプロジェクトのスケルトンソースコードを作成していきます。
ここでは、spring initializerというWebサイトから必要な情報を入力するとソースコードを生成してzipでダウンロードできるサイトで生成します。
各パラメータは下記スクリーンショットの通り入力しました。
- Spring Bootのバージョンは2022年10月時点の安定版
2.7.4
- Javaは最新の長期サポート(LTM)版の
17
- 依存関係には以下の二つ
- Spring Boot Dev Tools - 何かと使用するため
- Spring Web - 今回はAPIを開発するため
spring initializer
上記の通り入力したら、GENERATE
ボタンを押下すると、zipダウンロードが開始されます。
Spring Bootのスケルトンコードを上書き
上記でダウンロードしたzipファイルを解凍し、新規作成したプロジェクトに上書きコピーする。
Reload Maven All Project
ボタンを押下して、依存関係のあるライブラリ等を最新化。
(下記の図参照)
maven reload
実行と動作確認
下図の通り、Spring Applicationとして実行。
ブラウザを開いて、http://localhost:8080
と入力。
下図の通り、エラーとはなるが、表示が返ってくることを確認。
まだAPIも画面も実装していないので、現時点ではこれでOK。
WebAPIの追加
IDと名称をJSON形式で返却するAPIを開発する。
返却するJSONは以下の通り。
{
"id" : 100,
"name" : "taro"
}
JSONのデータを格納するDTOクラスの作成
getter/setterの記述を省略するためにLombokを使用する。
pom.xmlに以下の依存関係を追加する。
(spring initializerでも選択できたのですが、忘れていました。。)
追記後は、上記の手順同様にReload Maven All Project
ボタンを押下します。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
レスポンスとして返却するためのクラスを以下の通り実装する。
package com.example.springbootdemo.dto;
import lombok.Data;
@Data
public class Sample {
private int id;
private String name;
}
Controllerクラスの作成とAPIの実装
HelloController
クラスを新規に作成し、以下の通り実装する。
ここでは一旦細かい解説は結愛するが、/hello
にアクセスするとJSON形式でレスポンスを返却するようになる。
package com.example.springbootdemo.controller;
import com.example.springbootdemo.dto.Sample;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public Sample hello()
{
Sample sample = new Sample();
sample.setId(100);
sample.setName("taro");
return sample;
}
}
APIの動作確認
下図の通り、画面上部メニューからSpring Applicationを実行。
ブラウザを開いて、http://localhost:8080/hello
と入力。
以下の通りのJSONが表示されればOK。
{"id":100,"name":"taro"}
APIのテスト
テストコードの作成
上記で作成したAPIのテストコードを書いてみます。
Springでのテスト方法はいくつかありますが、ここではDBへのアクセスもないシンプルなAPIですので、テストコードから実際のAPIを呼び出して、想定通りのレスポンスが返却されることを確認します。
IntelliJ IDEAで新規にプロジェクトを作成した際に自動で作成されたテストクラスを以下の通り修正します。
package com.example.springbootdemo;
import com.example.springbootdemo.dto.Sample;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@SpringBootTest
@AutoConfigureMockMvc
class SpringBootDemoApplicationTests {
// APIを発行するためのMockオブジェクトを生成
@Autowired
private MockMvc mockMvc;
@Test
void contextLoads() throws Exception{
// JavaのObjectをJSONに変換するためのクラスを生成
ObjectMapper objectMapper = new ObjectMapper();
// 結果を検証するためのクラスを生成して、期待値をセット
Sample sample = new Sample();
sample.setId(100);
sample.setName("taro");
// 「/hello」パスのAPIを実行してレスポンスを検証
this.mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(sample)));
}
}
テストの実行
下図の通り、テストを実行します。
実行後は、IntellJ IDEAのRun
コンソールに結果が表示されます。
一番下に以下が出力されていれば、OKです。
その他、レスポンス内容なども出力されているかと思います。
Process finished with exit code 0
ここまでで、APIの作成とテストまで完了です。
次回はGitHubへのPUSHについて記事を作成します。
記事一覧
第二回 IntelliJ IDEAを使って、Spring BootプロジェクトをGitHubにPush
第三回 Dockerコンテナ上でSpring Bootアプリケーションのビルド
第四回 AWS CodeBuildでSpring Bootアプリケーションをビルド
Discussion