素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

投稿日:

【SpringBoot2】ControllerAdviceを使ってエラーハンドリングを実装する方法【共通化】

ねこじゃすり

created by Rinker
PEPPY(ペピイ)
¥3,850 (2025/01/05 12:56:12時点 Amazon調べ-詳細)

猫を魅了する魔法の装備品!

Anker PowerCor

created by Rinker
Anker
¥3,990 (2025/01/05 12:09:11時点 Amazon調べ-詳細)

旅行には必須の大容量モバイルバッテリー!

【最新機種】GoPro hero11 Black

created by Rinker
¥61,300 (2025/01/05 20:59:47時点 楽天市場調べ-詳細)

最新機種でVlogの思い出を撮影しよう!

レッドブル エナジードリンク 250ml×24本

created by Rinker
Red Bull(レッドブル)
¥4,000 (2025/01/05 12:33:39時点 Amazon調べ-詳細)

翼を授けよう!

ドラゴンクエスト メタリックモンスターズギャラリー メタルキング

created by Rinker
スクウェア・エニックス(SQUARE ENIX)
¥3,940 (2025/01/05 12:41:47時点 Amazon調べ-詳細)

みんな大好き経験値の塊をデスクに常備しておこう!

Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK

created by Rinker
Bauhutte(バウヒュッテ)
¥15,855 (2025/01/05 12:09:12時点 Amazon調べ-詳細)

メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!

BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール

created by Rinker
BANDAI SPIRITS(バンダイ スピリッツ)
¥10,429 (2025/01/05 12:09:13時点 Amazon調べ-詳細)

もう一人の僕を呼び覚ませ!!

スポンサーリンク

336×280




エラーハンドリングを共通化しよう

SpringBoot2を使っていAPI開発をしていると、システム内部で発生したException単位共通処理を簡単に実装する事が出来ます

実装するには@ControllerAdviceを使います。

今回は独自定義したエラークラスを使った共通ハンドリングの実装方法をご紹介しようと思います。

手順

目的

今回はHttpStatus単位のエラークラスと、その中のエラーメッセージ種別を定義して実装していこうと思います。

この粒度で用意しておけば、筆者的には汎用性はそれなりに高いかな?と思った次第です。

独自エラークラスの作成

まずはハンドリングしたいエラークラスを作成しましょう。
ちなみに、独自のエラークラスでなくてもハンドリングは可能ですが、今回は分かりやすくするために実装します。

メッセージ用の定数クラスを追加

次に、呼び出し元でThrowする際にメッセージを出し分けるために渡す定数クラスを用意します。

値はプロパティファイルのキーを定義しています。

Adviceクラスを実装

次に@ControllerAdviceを付与したクラスを実装します。

error.propertiesの用意

次にエラーメッセージを定義するプロパティファイルを用意しましょう。

なお、プロパティファイルの読み込みについては以下の記事でご紹介しているので、ベースパスにだけ今回のmessages/error階層を追加しておいてください。

データソースを変更

次に、JPAのID指定の単一取得の戻り値をOptional型に変えましょう。
そうすることで、呼び出し元のサービス層でのハンドリングが簡単になります。

サービスクラスにハンドリングを追加

最後に、サービス層でリソースデータが取得出来なかった場合のハンドリング処理を追加しましょう。

確認

では、これで実際にリクエストを投げてみましょう。

リソースが存在する場合

リソースが存在しない場合

もちろん、サーバー側にはしっかりとログが出ているので調査も問題ありません。

参考

現場至上主義 Spring Boot2 徹底活用

【ケース販売】日清 カップヌードル シーフードヌードル 75g×20個

終わりに

以上のように、SpringBootの標準アノテーションを利用することで簡単にエラーハンドリングを実装することが出来ました。

エラー時のハンドリングルールをしっかり行っておけば、開発や調査の効率化が狙えるので、ぜひ試してみてください♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , , ,

blogenist

Author: blogenist

関連記事

YouTubeも見てね♪