カテゴリ: Spring 更新日: 2026/04/11

Javaの@RestControllerアノテーションの使い方を完全ガイド!初心者でもわかるREST APIの基礎

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

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

生徒

「Springで@RestControllerってよく見かけますが、これって何をするために使うんですか?」

先生

@RestControllerは、SpringフレームワークでREST APIを作成するためのアノテーションです。これを使うと、ブラウザやクライアントアプリケーションにデータを返すエンドポイントを簡単に作成できます。」

生徒

「じゃあ、普通の@Controllerとは何が違うんですか?」

先生

「良い質問ですね。@Controllerは通常のWebページ(HTML)を返すために使いますが、@RestControllerはJSONやXMLのようなデータを返すために使います。では、具体的な使い方を見ていきましょう!」

1. @RestControllerアノテーションとは?

「1. @RestControllerアノテーションとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. @RestControllerアノテーションとは?
1. @RestControllerアノテーションとは?

@RestControllerは、JavaのSpringフレームワークでREST APIを作成するときに使用されるアノテーションで、クライアントにHTMLではなくデータを返すことに特化しています。特に、スマートフォンアプリやJavaScriptで動くフロントエンドアプリ、外部サービスとの連携など、「画面ではなくデータを返す通信」を行う場面で活躍します。

通常の@Controllerでは、返り値を画面として表示するためのテンプレートに渡す必要がありますが、@RestControllerを使うと、メソッドから返した値がそのままJSON形式に変換されてレスポンスとして送信されます。つまり、余計な設定をしなくても、APIとしてすぐに動かせる点が大きな特徴です。

例えば、学習の最初の段階では、次のようにメッセージを返すだけのシンプルなAPIから始めることで、REST APIの流れを直感的に理解できます。

例:@RestControllerで文字列データを返すシンプルなAPI

ブラウザで /hello にアクセスすると「APIから返されたメッセージ」が表示されます。


@RestController
public class SampleRestController {

    @GetMapping("/hello")
    public String hello() {
        return "これはREST APIから返されたメッセージです";
    }
}
        

このように、@RestControllerは設定が少なく、初心者でもすぐに動くWeb APIを作成できる点が魅力です。まずは簡単なレスポンスから始め、徐々にJSONデータの返却やパラメータ処理へとステップアップすると理解しやすくなります。

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

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

では実際に、@RestControllerを使って動作するREST APIを作ってみましょう。ここでは、最もシンプルな例として、URLへアクセスした際に文字列を返すだけのエンドポイントを作成します。Webページを表示するのではなく、データをそのまま返すという「REST APIらしい動作」を体験できます。

例:ブラウザでアクセスすると文字列を返すAPI

Google Chromeなどのブラウザで「http://localhost:8080/hello」にアクセスすると、下記のメッセージが表示されます。


@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "これはREST APIから返されたテキストデータです。";
    }
}

実行結果のイメージ

これはREST APIから返されたテキストデータです。

このコードは、アプリケーションを起動するだけですぐに動作します。フロントエンドを用意しなくてもブラウザからアクセスできるため、プログラミング初心者でも「APIがどう動くのか」をシンプルに体験できます。また、返す値を文字列からオブジェクトに変えると、自動的にJSON形式として返せるようになるため、実際のアプリやサービスとの連携も簡単に進められます。

まずはこのような簡単なエンドポイントで仕組みを理解し、その後ユーザー情報やリストデータを返すAPIへと発展させると、REST APIのイメージがより具体的に掴めるようになります。

3. JSON形式のデータを返す方法

3. JSON形式のデータを返す方法
3. JSON形式のデータを返す方法

次に、JSON形式のデータを返すAPIを作成してみましょう。@RestControllerでは、メソッドが返すオブジェクトが自動的にJSONに変換されます。


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User("Alice", 25);
    }
}

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; }
}

実行結果


{
    "name": "Alice",
    "age": 25
}

上記の例では、UserオブジェクトがJSON形式にシリアライズされて返されます。これにより、モバイルアプリケーションやフロントエンドフレームワークがデータを簡単に利用できます。

4. @RestControllerの活用例:CRUD操作

「4. @RestControllerの活用例:CRUD操作」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. @RestControllerの活用例:CRUD操作
4. @RestControllerの活用例:CRUD操作

REST APIでは、基本的なCRUD(Create, Read, Update, Delete)操作を実装することがよくあります。以下は、簡単なCRUD操作を実装したサンプルです。


import org.springframework.web.bind.annotation.*;
import java.util.*;

@RestController
@RequestMapping("/products")
public class ProductController {

    private List<String> products = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));

    @GetMapping
    public List<String> getProducts() {
        return products;
    }

    @PostMapping
    public void addProduct(@RequestBody String product) {
        products.add(product);
    }

    @DeleteMapping("/{index}")
    public void deleteProduct(@PathVariable int index) {
        products.remove(index);
    }
}

実行結果


GET /products
[ "Apple", "Banana", "Orange" ]

POST /products (Body: "Grapes")
[ "Apple", "Banana", "Orange", "Grapes" ]

DELETE /products/1
[ "Apple", "Orange", "Grapes" ]

このように、@RestControllerを使えば、データの取得や追加、削除といった操作を簡単に実装できます。@RequestBody@PathVariableを使うことで、クライアントからのリクエスト内容を処理できます。

5. @RestControllerの注意点とベストプラクティス

5. @RestControllerの注意点とベストプラクティス
5. @RestControllerの注意点とベストプラクティス

@RestControllerを使用する際には、以下の点に注意することで、より安全で効率的なAPIを作成できます。

  • セキュリティ対策として、入力データのバリデーションを行う。
  • 例外処理を@ControllerAdviceで一元管理する。
  • 適切なHTTPステータスコード(200 OK404 Not Foundなど)を返す。
  • 大量のデータを返す場合は、PaginationLimitを利用する。

6. @RestControllerで@RequestParamと@PathVariableを組み合わせてパラメータを処理する

6. @RestControllerで@RequestParamと@PathVariableを組み合わせてパラメータを処理する
6. @RestControllerで@RequestParamと@PathVariableを組み合わせてパラメータを処理する

@RestControllerでは、URLパラメータやクエリパラメータを利用して、クライアントから送られた値を柔軟に扱うことができます。特に、ユーザーIDや検索キーワードなどをAPIに渡す場合、@RequestParamと@PathVariableを使い分けることで、REST APIとして意味のある設計が可能になります。

例えば、/api/user?id=10 のようにクエリ形式でパラメータを取得する場合は@RequestParam、/api/user/10 のようにURLパスそのものに意味を持たせたい場合は@PathVariableを使用します。

パラメータの扱いを適切に設計できると、フロントエンドやモバイルアプリケーションとの連携がよりスムーズになり、REST APIとしての拡張性や可読性も向上します。

7. @RestControllerとサービス層(@Service)を分けて設計する理由

「7. @RestControllerとサービス層(@Service)を分けて設計する理由」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. @RestControllerとサービス層(@Service)を分けて設計する理由
7. @RestControllerとサービス層(@Service)を分けて設計する理由

@RestControllerを使ってAPIを設計する際、ビジネスロジックをすべてコントローラー内に記述してしまうと、コードが肥大化し保守性が低下します。そこで、処理の責務に応じてサービス層(@Service)を用意し、@RestControllerはリクエスト受付とレスポンス返却に専念させることが推奨されます。

このように役割を分離することで、APIの可読性が高まり、変更に強い設計となります。また、複数のAPIで同じ処理を共有する場合でも、サービス層に記述しておくことで重複を防ぎ、再利用性が向上します。

適切な役割分担を行うことで、Springアプリケーション全体の構造が整理され、REST APIの品質向上にもつながります。

8. @RestControllerで例外処理を行う際のエラーハンドリング設計

8. @RestControllerで例外処理を行う際のエラーハンドリング設計
8. @RestControllerで例外処理を行う際のエラーハンドリング設計

REST APIでは、予期せぬエラーや入力データの不備など、さまざまな例外が発生する可能性があります。@RestControllerで例外が発生した場合、適切なエラーレスポンスを返すことで、クライアント側での処理が行いやすくなります。

例えばデータが見つからない場合には404 Not Found、入力エラーが発生した場合には400 Bad RequestといったHTTPステータスコードを返すことで、問題を明確に伝えることができます。

また、例外処理を@ControllerAdviceとしてまとめることで、アプリ全体のエラーハンドリングを統一でき、REST APIとしての信頼性と保守性を高めることができます。

まとめ

まとめ
まとめ

今回の記事では、Springフレームワークの@RestControllerアノテーションについて詳しく解説しました。@RestControllerは、REST APIを簡単に構築できる便利なアノテーションであり、クライアントに対してデータをJSON形式で返すために使用されます。@GetMapping@PostMapping@DeleteMappingなどのメソッドと組み合わせることで、様々なHTTPリクエストに対応したエンドポイントを素早く作成できましたね。

特に、JSONデータのシリアライズ機能やCRUD操作の実装は、@RestControllerの大きな強みです。これにより、バックエンドAPIの開発が効率的になるだけでなく、モバイルアプリやフロントエンドのJavaScriptフレームワークとの連携もスムーズになります。また、セキュリティ対策や例外処理のベストプラクティスを活用することで、より堅牢なAPIを構築できることも学びました。

実際の開発現場では、複数のAPIエンドポイントを管理したり、異なるデータフォーマットに対応したりすることが求められます。そうした場合にも、@RestControllerとその他のSpringアノテーションを組み合わせて柔軟に対応できるようになります。これを機に、実際のプロジェクトでも積極的にSpringの機能を活用してみてください。

さらに理解を深めるためのサンプルコード

最後に、今回の学びを活かした応用例として、異なるHTTPステータスコードを返すAPIのサンプルコードを紹介します。


import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/items")
public class ItemController {

    private Map<Integer, String> items = new HashMap<>();

    @GetMapping("/{id}")
    public ResponseEntity<String> getItem(@PathVariable int id) {
        if (items.containsKey(id)) {
            return new ResponseEntity<>(items.get(id), HttpStatus.OK);
        } else {
            return new ResponseEntity<>("Item not found", HttpStatus.NOT_FOUND);
        }
    }

    @PostMapping
    public ResponseEntity<String> addItem(@RequestParam String name) {
        int id = items.size() + 1;
        items.put(id, name);
        return new ResponseEntity<>("Item added with ID: " + id, HttpStatus.CREATED);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteItem(@PathVariable int id) {
        if (items.remove(id) != null) {
            return new ResponseEntity<>("Item deleted", HttpStatus.OK);
        } else {
            return new ResponseEntity<>("Item not found", HttpStatus.NOT_FOUND);
        }
    }
}

実行結果


GET /items/1
"Item not found" (ステータス: 404 Not Found)

POST /items?name=Book
"Item added with ID: 1" (ステータス: 201 Created)

DELETE /items/1
"Item deleted" (ステータス: 200 OK)

このように、ResponseEntityを使うことで、柔軟にHTTPレスポンスを制御できます。APIのユーザビリティを向上させるためには、適切なHTTPステータスコードを返すことが重要です。

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

生徒

@RestControllerについて、だいぶ理解できました!データを簡単にJSONで返せるのが便利ですね。」

先生

「そうですね。特にフロントエンドとの連携が増えている今、@RestControllerの使い方を覚えることは非常に重要です。」

生徒

「CRUD操作のAPIも、思ったより簡単に作れるんですね。@RequestBody@PathVariableの使い方もわかりやすかったです。」

先生

「今後は@ControllerAdviceを使った例外処理や、セキュリティ設定にも挑戦してみましょう。それらをマスターすれば、より強力なAPIが作れるようになりますよ。」

生徒

「わかりました!今日は本当に勉強になりました。ありがとうございました!」

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

「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

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

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

@RestControllerとは何ですか?

@RestControllerは、SpringフレームワークでREST APIを構築するためのアノテーションです。JSONやXMLのデータを返すエンドポイントを簡単に作成でき、Webページではなくデータそのものをクライアントに返します。

@RestControllerと@Controllerの違いは何ですか?

@Controllerは通常HTMLのWebページを返すために使用されます。一方、@RestControllerはデータをJSONやXML形式で返すために使われます。@RestControllerは、@Controllerと@ResponseBodyを組み合わせたものと考えると理解しやすいです。

初心者でも簡単にREST APIを作成するにはどうすれば良いですか?

@RestControllerと@GetMappingなどのアノテーションを使用すれば簡単にREST APIを作成できます。例えば、Hello, World!というメッセージを返すエンドポイントを作る場合、@GetMapping("/hello")を使用してメソッドを定義すればOKです。

JSON形式のデータを返すにはどのようにすれば良いですか?

@RestControllerを使うと、Javaオブジェクトが自動的にJSON形式にシリアライズされます。例えば、ユーザーオブジェクトを作成し、それをメソッドで返すと、JSON形式でクライアントに送信されます。

CRUD操作を実装する際に便利なアノテーションは何ですか?

@GetMapping、@PostMapping、@PutMapping、@DeleteMappingのアノテーションを使用することで、CRUD操作を簡単に実装できます。例えば、GETリクエストでデータを取得し、POSTリクエストで新しいデータを追加する、といった操作が可能です。

@RestControllerでセキュリティを考慮する必要があるのはどんな場面ですか?

入力データのバリデーションや、認証・認可の設定が必要な場合です。また、例外処理を適切に行い、不正なリクエストやサーバーエラーからアプリケーションを守ることも重要です。

@RestControllerを使って大量のデータを返す際のベストプラクティスは何ですか?

大量のデータを返す場合は、Pagination(ページネーション)やLimitを使用して、クライアントに返すデータを制限する方法が推奨されます。これにより、サーバーやネットワークの負荷を軽減できます。

@RestControllerで異なるHTTPステータスコードを返す方法を教えてください。

ResponseEntityを使用することで、適切なHTTPステータスコードを返すことができます。例えば、リソースが見つからなかった場合には404 Not Found、成功した場合には200 OKや201 Createdなどを返すように設定します。

@RestControllerで@RequestBodyと@PathVariableはどう使い分けますか?

@RequestBodyはリクエストのボディ部分をJavaオブジェクトとして取得するのに使います。一方、@PathVariableはURLパスの一部を変数として取得するのに使用します。例えば、POSTリクエストのデータ追加には@RequestBody、リソース削除には@PathVariableを使います。

初心者が@RestControllerを学ぶ際におすすめの練習方法は何ですか?

簡単なHello, World! APIを作成し、その後にJSONデータを返すAPIを作成することをおすすめします。さらに、CRUD操作を実装することで、基本的なREST APIの動作を理解できます。
カテゴリの一覧へ
新着記事
New1
Thymeleaf
Thymeleafのth:replaceの使い方を徹底解説!テンプレート置き換えの基本やth:includeとの違いを解説
更新記事
New2
Java
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
更新記事
New3
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New4
Spring
Spring の@RequestParamの使い方!テキストボックス、ラジオボタン、チェックボックス、セレクトボックスの値を受け取る。
更新記事
人気記事
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のScannerクラスとIOExceptionの使い方を完全解説!初心者でもわかる例外処理と入力処理の基本
No.3
Java&Spring記事人気No3
Java
Javaのswitch文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.4
Java&Spring記事人気No4
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.5
Java&Spring記事人気No5
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.6
Java&Spring記事人気No6
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.7
Java&Spring記事人気No7
Java
JavaのStringクラスとequalsメソッドの使い方を完全ガイド!初心者でもわかる文字列比較の基本
No.8
Java&Spring記事人気No8
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説