カテゴリ: Spring 更新日: 2025/12/26

JavaのSpring Bootでの@ResponseEntityアノテーションの使い方を初心者向けに徹底解説!

Springの@ResponseEntityアノテーション
Springの@ResponseEntityアノテーション

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

生徒

「Spring BootでHTTPレスポンスをカスタマイズしたいんですが、どうすればいいですか?」

先生

「HTTPレスポンスをカスタマイズする場合は、@ResponseEntityアノテーションが便利です。これを使うと、ステータスコードやヘッダーも自由に設定できます。」

生徒

「具体的にどう使うんですか?」

先生

「基本的な使い方から見ていきましょう!」

1. @ResponseEntityとは?

1. @ResponseEntityとは?
1. @ResponseEntityとは?

JavaのSpring Bootフレームワークでは、@ResponseEntityアノテーションを使うことで、サーバーからクライアントに返すHTTPレスポンスの中身を細かくコントロールできます。通常のコントローラーメソッドは、メソッドの戻り値をそのままレスポンスボディとして返し、ステータスコードは自動的に「200 OK」になりますが、@ResponseEntityを使うと、ステータスコード、レスポンスボディ、ヘッダーを自分の意図どおりに設定できます。

もう少しかみ砕いて言うと、@ResponseEntityは「どんな結果を、どんな状態で返すか」をひとまとめにして表現するための入れ物のようなものです。例えば「処理が成功したからメッセージを返したい」「エラーが起きたのでエラーメッセージとエラー用のステータスコードを返したい」といったときに、この入れ物の中に「文字列やオブジェクト」「ステータスコード」「必要ならヘッダー情報」を詰め込んで返すイメージです。

初心者のうちは、まず「ResponseEntity<型>という形で、どんなデータを返すかを指定する」「第2引数にHttpStatus.OKなどのステータスコードを渡せる」という二つを覚えておくと理解しやすくなります。これが分かってくると、Spring BootでREST APIを作るときに、「成功」「失敗」「データなし」といった状態をきちんとHTTPレスポンスとして表現できるようになり、実践的なWebアプリケーション開発に一歩近づけます。

2. @ResponseEntityの基本的な使い方

2. @ResponseEntityの基本的な使い方
2. @ResponseEntityの基本的な使い方

ここでは、@ResponseEntityを実際にどう書くのか、いちばんシンプルな例で確認してみましょう。まずは「/hello」というパスにアクセスしたときに、メッセージとHTTPステータスコードをセットで返す基本パターンです。


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleController {

    @GetMapping("/hello")
    public ResponseEntity<String> sayHello() {
        return new ResponseEntity<>("Hello, World!", HttpStatus.OK);
    }
}

このコードでは、/helloというURLにブラウザからアクセスすると、「Hello, World!」という文字列と一緒にHTTPステータスコード200(OK)が返されます。ResponseEntity<String>という戻り値の型は、「文字列をボディとして持つHTTPレスポンスを返します」という意味だと考えると分かりやすいです。

new ResponseEntity<>("Hello, World!", HttpStatus.OK)の第1引数がクライアントに返すメッセージ(レスポンスボディ)、第2引数がステータスコードです。つまりこの1行だけで、「内容はこのテキスト」「結果は成功(OK)」という情報をまとめて返していることになります。ブラウザの開発者ツールでネットワークタブを開いてみると、ステータスが「200 OK」になっていることも確認できるので、Spring BootとHTTPレスポンスの関係を体感しながら学ぶことができます。

3. HTTPステータスコードの設定

3. HTTPステータスコードの設定
3. HTTPステータスコードの設定

@ResponseEntityでは、さまざまなHTTPステータスコードを設定できます。例えば、リクエストが正常に処理されなかった場合には、HttpStatus.BAD_REQUESTを返すことができます。


@GetMapping("/error")
public ResponseEntity<String> handleError() {
    return new ResponseEntity<>("Bad Request", HttpStatus.BAD_REQUEST);
}

この場合、クライアントには「Bad Request」というメッセージとともにHTTPステータス400が返されます。

4. レスポンスヘッダーのカスタマイズ

4. レスポンスヘッダーのカスタマイズ
4. レスポンスヘッダーのカスタマイズ

HTTPレスポンスにはヘッダーを追加することも可能です。ヘッダーには、メタデータや追加情報を含めることができます。


import org.springframework.http.HttpHeaders;

@GetMapping("/custom-header")
public ResponseEntity<String> customHeader() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Custom-Header", "MyValue");
    return new ResponseEntity<>("Header added!", headers, HttpStatus.OK);
}

この例では、Custom-Headerという独自のヘッダーがレスポンスに追加されます。

5. ボディの内容をカスタマイズする方法

5. ボディの内容をカスタマイズする方法
5. ボディの内容をカスタマイズする方法

通常、@ResponseEntityは文字列だけでなく、オブジェクトも返すことができます。JSON形式のデータを返す場合、Spring Bootは自動的にオブジェクトをシリアライズしてくれます。


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

public class User {
    private String name;
    private int age;

    // コンストラクタとゲッター・セッター
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() { return name; }
    public int getAge() { return age; }
}

@GetMapping("/user")
public ResponseEntity<User> getUser() {
    User user = new User("John", 30);
    return new ResponseEntity<>(user, HttpStatus.OK);
}

このコードでは、/userエンドポイントにアクセスすると、以下のようなJSONデータが返されます。


{
    "name": "John",
    "age": 30
}

6. エラーハンドリングと@ResponseEntity

6. エラーハンドリングと@ResponseEntity
6. エラーハンドリングと@ResponseEntity

Spring Bootでは、@ResponseEntityを使ってエラーを適切に返すことも重要です。例えば、リソースが見つからなかった場合に404エラーを返す方法です。


@GetMapping("/not-found")
public ResponseEntity<String> notFound() {
    return new ResponseEntity<>("Resource not found", HttpStatus.NOT_FOUND);
}

この例では、リクエストされたリソースが見つからない場合に、HTTPステータス404(Not Found)が返されます。

7. まとめ

7. まとめ
7. まとめ

今回の記事では、JavaのSpring Bootで使用する@ResponseEntityアノテーションについて学びました。@ResponseEntityを使用すると、HTTPレスポンスの内容を細かくカスタマイズできるため、APIの設計や開発においてとても便利です。特に、ステータスコードの設定やレスポンスヘッダーの追加、オブジェクトを返す際のシリアライズの処理など、幅広い用途に対応できます。

以下は、今回学んだ重要なポイントです。

  • @ResponseEntityを使うことで、HTTPステータスコードを自由に設定可能。
  • レスポンスヘッダーを追加して、カスタムデータを返すことができる。
  • オブジェクトを返す場合、自動的にJSON形式にシリアライズされる。
  • エラーハンドリングにも有効で、適切なステータスコードを返すことができる。

以下は、@ResponseEntityの様々な使い方をまとめたサンプルプログラムです。


import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SummaryController {

    // ステータス200(OK)の例
    @GetMapping("/success")
    public ResponseEntity<String> successResponse() {
        return new ResponseEntity<>("Success!", HttpStatus.OK);
    }

    // カスタムヘッダーの追加
    @GetMapping("/header-example")
    public ResponseEntity<String> headerExample() {
        HttpHeaders headers = new HttpHeaders();
        headers.add("X-Example-Header", "HeaderValue");
        return new ResponseEntity<>("Header added", headers, HttpStatus.OK);
    }

    // ステータス404(Not Found)の例
    @GetMapping("/not-found-example")
    public ResponseEntity<String> notFoundExample() {
        return new ResponseEntity<>("Resource not found", HttpStatus.NOT_FOUND);
    }

    // JSONオブジェクトのレスポンス
    @GetMapping("/json-example")
    public ResponseEntity<User> jsonExample() {
        User user = new User("Alice", 25);
        return new ResponseEntity<>(user, HttpStatus.OK);
    }

    // エラーハンドリングの例
    @GetMapping("/bad-request-example")
    public ResponseEntity<String> badRequestExample() {
        return new ResponseEntity<>("Bad request error", HttpStatus.BAD_REQUEST);
    }
}

このコードには、ステータスコード、カスタムヘッダー、エラーハンドリング、JSONレスポンスの例が含まれています。実際の開発では、これらを組み合わせてAPIの挙動をカスタマイズすることが一般的です。

先生と生徒の振り返り会話

生徒

「@ResponseEntityを使うと、HTTPレスポンスをかなり細かく制御できるんですね。」

先生

「そうですね。特に、APIの開発ではレスポンスの内容を調整することが大切なので、@ResponseEntityは非常に役立ちます。」

生徒

「エラーハンドリングも簡単にできるので、クライアントにわかりやすいエラーメッセージを返すことができますね。」

先生

「その通りです。適切なステータスコードとメッセージを返すことで、クライアント側の開発者もデバッグしやすくなります。」

生徒

「これで、Spring BootのAPI開発がもっとスムーズにできそうです!」

先生

「ぜひ試してみてください。実際に使いながら学ぶと理解が深まりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

@ResponseEntityを使うと何ができますか?

@ResponseEntityを使うと、HTTPレスポンスのステータスコード、ヘッダー、ボディを細かく設定できます。これにより、APIのレスポンスをクライアントの要求に合わせて柔軟にカスタマイズできます。

@ResponseEntityと通常のコントローラーのレスポンスの違いは何ですか?

通常のコントローラーはデフォルトでHTTPステータス200(OK)を返しますが、@ResponseEntityを使うと、ステータスコードやヘッダーをカスタマイズできる点が大きな違いです。

ステータスコードを設定する方法を教えてください。

@ResponseEntityの第2引数にHttpStatusを指定することで、ステータスコードを設定できます。例えば、HttpStatus.OKやHttpStatus.BAD_REQUESTなどを使用します。

レスポンスヘッダーを追加するにはどうすればいいですか?

HttpHeadersクラスを使ってヘッダーを作成し、それを@ResponseEntityの引数に渡すことでレスポンスヘッダーを追加できます。

JSON形式でデータを返すにはどうしたらいいですか?

@ResponseEntityでオブジェクトを返すと、Spring Bootが自動的にそのオブジェクトをJSON形式にシリアライズしてレスポンスを生成します。

エラーが発生した場合、クライアントに適切なエラーメッセージを返す方法は?

@ResponseEntityを使って、エラーメッセージとHTTPステータスコード(例えばHttpStatus.NOT_FOUNDやHttpStatus.BAD_REQUEST)を設定することで、クライアントに適切なエラーメッセージを返せます。

@ResponseEntityを使うとパフォーマンスに影響はありますか?

@ResponseEntity自体が軽量なため、通常のレスポンスに比べて大きなパフォーマンス差はありません。ただし、複雑な処理を追加するとパフォーマンスに影響する可能性があります。

Spring Bootで@ResponseEntityを使うのはどのような場面が適していますか?

カスタムレスポンスが必要な場合や、エラーメッセージを詳細に設定する必要がある場合、またクライアントと明確な通信を行いたい場合に適しています。

@ResponseEntityを使うとき、オブジェクトの中にネストされたデータもJSONとして返せますか?

はい、Spring Bootはオブジェクト内のネストされたデータも自動的にシリアライズしてJSONとして返すことができます。

HTTPステータスコードの設定やヘッダーの追加を行う代わりに、通常の方法で対応することはできますか?

通常の方法でも可能ですが、コードが煩雑になりやすいため、@ResponseEntityを使う方がシンプルかつ管理しやすい設計になります。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説