カテゴリ: Micronaut 更新日: 2026/03/20

Micronautルーティング基本ガイド!@Getや@PostでHTTPメソッドをマスター

Micronautのルーティングの基本!@Get・@PostなどHTTPメソッドの使い方
Micronautのルーティングの基本!@Get・@PostなどHTTPメソッドの使い方

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

生徒

「MicronautでWebサイトやAPIを作るとき、特定のURLにアクセスしたときに特定の処理を実行させるにはどうすればいいですか?」

先生

「それは『ルーティング』という機能を使います。Micronautでは、@Get@Postといったアノテーションをメソッドに付けるだけで、簡単にURLと処理を紐付けることができるんですよ。」

生徒

「アノテーションを付けるだけなんですね!具体的にはどのようにプログラムを書くんですか?」

先生

「それでは、基本的なHTTPメソッドの使い方とルーティングの書き方を詳しく見ていきましょう!」

1. Micronautにおけるルーティングの役割

1. Micronautにおけるルーティングの役割
1. Micronautにおけるルーティングの役割

ルーティングとは、簡単に言うと「交通整理」のようなものです。ユーザーがブラウザやアプリから送ってきた「このURLに、この命令(HTTPメソッド)でアクセスしたい」というリクエストに対して、サーバー側のどのプログラムを実行するかを決定する仕組みのことです。

Micronautは、このルーティングを非常に高速かつ直感的に記述できるように設計されています。従来のフレームワークでは複雑な設定ファイルが必要なこともありましたが、Micronautでは「コントローラー」と呼ばれるクラスを作成し、そこに専用の印(アノテーション)を付けるだけで完了します。これにより、開発者は「どのURLで何をさせるか」というロジックに集中できるようになります。

2. コントローラーの基本構造と作成方法

2. コントローラーの基本構造と作成方法
2. コントローラーの基本構造と作成方法

まずは、リクエストを受け取る窓口となる「コントローラー」を作りましょう。クラスの先頭に @Controller アノテーションを付けます。このカッコの中に記述したパスが、そのクラス内のすべてのメソッドに共通するベースのURLになります。

例えば、@Controller("/api") と書けば、その中のメソッドはすべて「http://localhost:8080/api/...」というURLでアクセスされることになります。このように階層構造を意識して設計することで、整理整頓された分かりやすいAPIを作ることができます。


package com.example;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/hello")
public class HelloController {

    @Get
    public String index() {
        return "ハロー!Micronautの世界へようこそ";
    }
}

3. @Getアノテーションでデータを取り出す

3. @Getアノテーションでデータを取り出す
3. @Getアノテーションでデータを取り出す

もっとも頻繁に使われるのが @Get アノテーションです。これは、サーバーから情報を取得するときに使われる「GETリクエスト」を処理するためのものです。ブラウザでURLを入力してページを開く動作は、基本的にすべてこのGETリクエストに該当します。

Micronautでは、メソッドに @Get("/path") と書くことで、特定のサブパスを指定できます。もし @Controller("/books") というクラスの中に @Get("/list") というメソッドがあれば、その処理は「/books/list」というURLで呼び出されます。戻り値として文字列を返せばテキストとして、オブジェクトを返せば自動的にJSON形式としてクライアントに届けられます。

4. パス変数を使って動的なURLを作る

4. パス変数を使って動的なURLを作る
4. パス変数を使って動的なURLを作る

「ユーザーごとに表示を変えたい」「特定の商品IDの詳細を見たい」という場合、URLの一部を動的に変える必要があります。これには「パス変数」という仕組みを使います。URLのパスの中に中括弧 {変数名} を入れることで、その部分をプログラムの引数として受け取ることができます。

この機能により、何百、何千というページを一つひとつのURLごとに作る必要がなくなります。一つのメソッドで、変化するURLに対応できる柔軟な設計が可能になるのです。引数の名前とパス変数の名前を一致させるだけで、Micronautが自動的に値を流し込んでくれます。


package com.example;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/users")
public class UserController {

    // {id} の部分が変数になります
    @Get("/{id}")
    public String getUser(String id) {
        return "ユーザーID: " + id + " の情報を表示します";
    }
}

(アクセス例:http://localhost:8080/users/123)
ユーザーID: 123 の情報を表示します

5. @Postアノテーションでデータを送信する

5. @Postアノテーションでデータを送信する
5. @Postアノテーションでデータを送信する

サーバーに新しいデータを保存したり、重いデータを送信したりするときは @Post アノテーションを使います。これはHTTPのPOSTメソッドに対応しています。お問い合わせフォームの送信や、SNSの投稿、ユーザー登録などでよく使われる命令です。

POSTリクエストでは、データはURLの中に丸見えになる形ではなく、リクエストの中身(ボディ)に隠されて送られます。Micronautでは、メソッドの引数に @Body を付けることで、送られてきたJSONデータなどをJavaのオブジェクトとして簡単に受け取ることができます。この自動変換機能(デシリアライズ)のおかげで、面倒な解析コードを書く必要がありません。


package com.example;

import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;

@Controller("/contact")
public class ContactController {

    @Post("/send")
    public String receiveMessage(@Body String message) {
        // 本来はここでデータベース保存などの処理をします
        return "メッセージを受け取りました: " + message;
    }
}

6. その他のHTTPメソッドを活用する

6. その他のHTTPメソッドを活用する
6. その他のHTTPメソッドを活用する

Webアプリケーションの開発では、取得(GET)や作成(POST)以外にも、データの更新や削除を行うためのメソッドが用意されています。Micronautはこれらすべてに専用のアノテーションを提供しています。

  • @Put:既存のデータをまるごと置き換える(更新)ときに使います。
  • @Patch:データの一部だけを修正するときに使います。
  • @Delete:データを削除するときに使います。

これらを適切に使い分けることで、「RESTful(レストフル)」と呼ばれる、世界中のエンジニアが理解しやすい標準的なルールに基づいたAPIを作ることができます。例えば「/books/1」という同じURLでも、GETなら「見る」、DELETEなら「消す」というように、メソッドによって動作を切り替えるのがスマートな設計です。

7. クエリパラメータを受け取る方法

7. クエリパラメータを受け取る方法
7. クエリパラメータを受け取る方法

URLの末尾に ?key=value という形式で付いているデータを「クエリパラメータ」と呼びます。検索結果の絞り込みや並び替えなどでよく見かけるものです。Micronautでは、メソッドの引数名をパラメータ名と同じにするだけで、自動的に値を取得できます。

もしそのパラメータが必須でない場合は、Javaの Optional クラスを使ったり、デフォルト値を設定したりすることも可能です。これにより、ユーザーが検索条件を指定しなかった場合でもエラーにならずに動作する、親切なシステムを作ることができます。プログラミング未経験の方でも、WebサイトのURLの最後にある「?」以降がこれにあたると言えばピンとくるかもしれません。


package com.example;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.core.annotation.Nullable;

@Controller("/search")
public class SearchController {

    @Get
    public String find(@Nullable String q) {
        if (q == null) {
            return "検索キーワードを入力してください";
        }
        return "キーワード「" + q + "」で検索中...";
    }
}

(アクセス例:http://localhost:8080/search?q=java)
キーワード「java」で検索中...

8. レスポンスの状態コードを制御する

8. レスポンスの状態コードを制御する
8. レスポンスの状態コードを制御する

処理が成功したときは「200 OK」、ページが見つからないときは「404 Not Found」という数字を返すのがWebのルールです。これを「HTTPステータスコード」と呼びます。Micronautでは、通常は自動で適切な番号を返してくれますが、意図的に変更したい場合もあります。

例えば、新しいデータの作成に成功したときは「201 Created」を返したいものです。これには HttpResponse というクラスを使います。単にデータを返すだけでなく、「ステータスコード」と「中身」をセットにして返すことで、アプリの利用者に「何が起きたか」を正確に伝えることができるようになります。これは、信頼性の高いプロフェッショナルなアプリを作るための大切な一歩です。

9. ルーティングの優先順位と注意点

9. ルーティングの優先順位と注意点
9. ルーティングの優先順位と注意点

URLの指定が重なってしまった場合、Micronautはより具体的なパスを優先します。しかし、あまりにも複雑なルーティングを作ると、開発者自身が混乱して「なぜかこの処理が呼ばれない!」という事態になりかねません。ルーティングはできるだけシンプルに保つのがコツです。

また、Micronautはコンパイル時にルーティング情報を確定させるため、実行時のオーバーヘッドが非常に少ないのが特徴です。つまり、ルーティングが増えても動作が重くなりにくいのです。初心者のうちは、一つのコントローラーに多くの役割を持たせすぎず、機能ごとにクラスを分けて管理することをお勧めします。そうすることで、読みやすく、修正しやすい綺麗なコードを維持できます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New2
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New3
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
New4
Micronaut
Micronautで非同期HTTP処理を行う方法!リアクティブ対応の基礎知識
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.5
Java&Spring記事人気No5
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.6
Java&Spring記事人気No6
Java
Java Optional ifPresentの使い方を徹底解説!nullチェックをスマートに省略する方法
No.7
Java&Spring記事人気No7
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.8
Java&Spring記事人気No8
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?