カテゴリ: Spring 更新日: 2026/01/22

Spring Bootの例外処理入門!初心者にもわかる基本と設計の考え方

Spring Bootの例外処理入門:基礎から設計指針まで
Spring Bootの例外処理入門:基礎から設計指針まで

教材紹介 Spring Boot 学習のおすすめ教材

Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。

Spring Boot 3 プログラミング入門をAmazonで見る

※ Amazon広告リンク

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootでエラーが出たときに、ちゃんとしたメッセージを返す方法ってあるんですか?」

先生

「もちろんありますよ。Spring Bootでは例外処理をうまく設計することで、APIの信頼性やユーザー体験を向上させられます。」

生徒

「エラーメッセージを統一したり、共通の処理をしたりってできますか?」

先生

「では、例外処理の基本から、@ControllerAdvice@ExceptionHandlerの使い方、そして設計のポイントまで詳しく解説していきましょう。」

1. Spring Bootの例外処理とは?

1. Spring Bootの例外処理とは?
1. Spring Bootの例外処理とは?

Spring Bootの例外処理とは、アプリケーション実行中に発生したエラー(例外)を適切にキャッチして、開発者が意図した形式でレスポンスやログを返すための仕組みです。

例えば、入力値が不正なときやデータが存在しないときなどに、ただの500エラーではなく、ユーザーにわかりやすいメッセージを返すために使われます。

2. @ExceptionHandlerによる基本的な例外処理

2. <code>@ExceptionHandler</code>による基本的な例外処理
2. @ExceptionHandlerによる基本的な例外処理

@ExceptionHandlerは、特定のコントローラ内で発生した例外をキャッチして処理するためのアノテーションです。


@Controller
public class SampleController {

    @GetMapping("/error-test")
    public String errorTest() {
        throw new IllegalArgumentException("不正な入力です");
    }

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {
        return ResponseEntity.badRequest().body("エラー: " + ex.getMessage());
    }
}

このように、特定の例外クラスに対して独自のレスポンスを返すことができます。ただし、複数のコントローラで同じ処理を書くのは大変なので、共通化の仕組みが必要になります。

3. @ControllerAdviceで共通の例外処理クラスを作成

3. <code>@ControllerAdvice</code>で共通の例外処理クラスを作成
3. @ControllerAdviceで共通の例外処理クラスを作成

Spring Bootでは、@ControllerAdviceを使ってアプリケーション全体の例外処理を一括で管理できます。API開発などでは特に役立ちます。


@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {
        return ResponseEntity.badRequest().body("リクエストエラー: " + ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        return ResponseEntity.internalServerError().body("システムエラーが発生しました");
    }
}

@ExceptionHandlerを複数定義すれば、例外の種類に応じたメッセージを分けることができます。これで例外処理の重複も減り、保守性が高まります。

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

4. オリジナルの例外クラスを定義する

4. オリジナルの例外クラスを定義する
4. オリジナルの例外クラスを定義する

アプリケーション独自のエラー状態に対応するために、独自の例外クラスを作ることもよくあります。例えば、「データが見つからない」などのケースです。


public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

そして、GlobalExceptionHandlerでこの例外をキャッチするようにします。


@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleNotFound(ResourceNotFoundException ex) {
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body("データが見つかりません: " + ex.getMessage());
}

5. JSON形式でエラーレスポンスを返す設計

5. JSON形式でエラーレスポンスを返す設計
5. JSON形式でエラーレスポンスを返す設計

Spring BootでAPI開発をしている場合は、HTMLではなくJSON形式でエラーを返すことが一般的です。レスポンスボディに詳細な情報を含めると、フロントエンドとの連携がしやすくなります。


public class ErrorResponse {
    private String message;
    private String errorCode;

    // コンストラクタ・getter・setter省略
}

@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(ResourceNotFoundException ex) {
    ErrorResponse error = new ErrorResponse();
    error.setMessage("データが存在しません");
    error.setErrorCode("404_NOT_FOUND");
    return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}

このような実装により、RESTfulなエラーハンドリングが可能になります。エラーコードを含めることで、クライアント側の処理分岐にも使えます。

6. バリデーションエラーの処理方法

6. バリデーションエラーの処理方法
6. バリデーションエラーの処理方法

@Valid@Validatedを使ったフォームバリデーションでは、MethodArgumentNotValidExceptionという例外が発生します。この例外も@ControllerAdviceで一括処理が可能です。


@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleValidation(MethodArgumentNotValidException ex) {
    String errorMessage = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
    ErrorResponse error = new ErrorResponse();
    error.setMessage("入力エラー: " + errorMessage);
    error.setErrorCode("400_VALIDATION");
    return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}

これにより、フォームのバリデーションエラーにも統一されたレスポンス形式を適用できます。

7. 設計指針:例外処理で意識すべきポイント

7. 設計指針:例外処理で意識すべきポイント
7. 設計指針:例外処理で意識すべきポイント

Spring Bootで例外処理を設計するときは、以下のポイントを意識すると、開発と保守がしやすくなります。

  • 独自の例外クラスを使ってエラーの種類を明確にする
  • JSONレスポンスにしてエラーコードを付ける
  • @ControllerAdviceで例外処理を集中管理する
  • ログ出力とユーザー向けメッセージを分離する
  • 開発初期段階から例外処理のルールを決めておく

例外処理は単なるエラー回避の仕組みではなく、アプリの品質やユーザビリティに直結する重要な設計要素です。

カテゴリの一覧へ
新着記事
JavaのIndexOutOfBoundsExceptionを完全ガイド!初心者でも理解できる例外処理と回避方法
スッキリわかるJava入門 第4版|独学でもレッスンでも学べる完全ガイド
JavaのCookieクラスのgetCommentメソッドを解説!Servlet開発でクッキーの説明文を取得する方法
JavaのBufferedOutputStreamクラスのwriteメソッドを徹底解説!初心者でもわかるファイルへのバイナリ書き込み
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.4
Java&Spring記事人気No4
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.5
Java&Spring記事人気No5
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.6
Java&Spring記事人気No6
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
No.8
Java&Spring記事人気No8
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク