Spring Boot API連携

Spring BootのRest APIサービスにチェック処理を追加してみた

特定のテーブルのデータ取得・追加・更新・削除を行うRest APIサービスでは、データ追加・更新する際は、@RequestBodyアノテーションでエンティティクラスのオブジェクトを渡すが、そのエンティティクラスのオブジェクトに対し、チェック処理を追加することもできる。

今回は、STS(Spring Tool Suite)を利用したSpring Bootアプリケーション上で、データ追加・更新する際に、@RequestBodyアノテーションで渡すエンティティクラスのオブジェクトにチェック処理を追加してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の実装が完了していること。

Spring Bootで特定のテーブルのデータ取得・追加・更新・削除を行うRest APIサービスを作成してみたSpring Bootアプリケーションでは、@RestControllerアノテーションを利用することで、Rest APIサービスを作成...

作成したサンプルプログラムの内容

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから追加・変更したプログラムである。

pom.xml(追加分)の内容は以下の通りで、バリデーションチェックを行うためのライブラリを追加している。

また、application.propertiesの内容は以下の通りで、エラーメッセージのファイル名(messages.properties)を指定する設定を追加している。

さらに、messages.propertiesの内容は以下の通りで、チェック処理でのエラーメッセージを定義している。

また、ユーザーデータのエンティティクラスの内容は以下の通りで、名前・生年月日・性別のチェックを行うアノテーションを追加している。



「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

なお、ユーザーデータのエンティティクラスで生年月日の日付チェックを行うアノテーションの内容は、以下の通り。



【PR】「Filmora」は初心者でも本格的な動画編集ができる大変便利なツールだった「Filmora」は初心者でも使いやすい動画編集ツールで、テンプレートとして利用できるテキスト・動画・音楽などが充実していると共に、複数...

また、Restコントローラクラスの内容は以下の通りで、saveUserData・updateUserDataメソッドで渡すユーザーデータのエンティティクラスのチェック処理を行えるよう、@Validアノテーションを付与している。



さらに、例外処理を行うハンドラークラスの内容は以下の通りで、エンティティクラスのチェック処理やURL指定でエラーになった場合の処理を行っている。

なお、上記ハンドラークラスで利用するレスポンスエンティティに指定するクラスの内容は、以下の通り。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-rest-api-check/demoRestApi



「EaseUS Todo Backup」は様々な形でバックアップ取得が行える便利ツールだったパソコン内のデータを、ファイル/パーティション/ディスク等の様々な単位でバックアップしたり、バックアップのスケジュール設定や暗号化設定も...

サンプルプログラムの実行結果

サンプルプログラムの実行結果は、以下の通り。Spring Bootアプリケーションと、Postmanを起動した後で、それぞれの動作確認を行う。

1) 接続先となるOracleデータベース上に、以下のUSER_DATAテーブルとデータを作成しておく。
サンプルプログラムの実行結果_1

2) リクエストを「POST」、URLを「http://localhost:8085/users」、リクエストボディに(名前の)チェックエラーとなるデータをJSON形式で設定して「Send」ボタンを押下すると、以下のように、名前が未入力である旨のエラーが返却される。
サンプルプログラムの実行結果_2_1

サンプルプログラムの実行結果_2_2

3) リクエストを「POST」、URLを「http://localhost:8085/users」、リクエストボディに(生年月日の)チェックエラーとなるデータをJSON形式で設定して「Send」ボタンを押下すると、以下のように、生年月日が不正である旨のエラーが返却される。
サンプルプログラムの実行結果_3_1

サンプルプログラムの実行結果_3_2

4) リクエストを「POST」、URLを「http://localhost:8085/users」、リクエストボディに(性別の)チェックエラーとなるデータをJSON形式で設定して「Send」ボタンを押下すると、以下のように、性別が不正である旨のエラーが返却される。
サンプルプログラムの実行結果_4_1

サンプルプログラムの実行結果_4_2



5) リクエストを「POST」、URLを「http://localhost:8085/users」、リクエストボディに(名前・生年月日・性別の)チェックエラーとなるデータをJSON形式で設定して「Send」ボタンを押下すると、以下のように、それぞれのエラーがまとめて返却される。
サンプルプログラムの実行結果_5_1

サンプルプログラムの実行結果_5_2

6) リクエストを「PUT」、URLを「http://localhost:8085/users/3」、リクエストボディに(名前・生年月日・性別の)チェックエラーとなるデータをJSON形式で設定して「Send」ボタンを押下すると、POSTの場合と同様に、それぞれのエラーがまとめて返却される。
サンプルプログラムの実行結果_6_1

サンプルプログラムの実行結果_6_2

7) 1)~6)までの操作を実行後に、接続先となるOracleデータベース上のUSER_DATAテーブルを確認すると、データが更新されていないことが確認できる。

なお、追加・更新が正常終了する場合の結果は、以下の記事の実行結果と同様となる。

Spring Bootで特定のテーブルのデータ取得・追加・更新・削除を行うRest APIサービスを作成してみたSpring Bootアプリケーションでは、@RestControllerアノテーションを利用することで、Rest APIサービスを作成...

要点まとめ

  • データ追加・更新する際に、@RequestBodyアノテーションで渡すエンティティクラスのオブジェクトでチェック処理を行えるようにするには、追加・更新するエンティティクラスに、チェックを行うアノテーションを追加すると共に、Restコントローラクラスで渡すエンティティクラスに、@Validアノテーションを付与すればよい。