@GetMappingの使い方と引数を徹底解説!【初心者向け】

はじめに

こんにちは!
今回は、Spring Frameworkの中でもよく使われる@GetMappingというアノテーションについてお話しします。
これを使うと、Webアプリケーションでのリクエスト処理がとっても簡単になります!

@GetMappingって何?

@GetMappingとは


「HTTPのGETリクエストを処理するためのアノテーション」


のことです。


HTTPリクエストって聞くと難しそうですが、実は私たちがブラウザで「https://example.com/home」とかのURLを入力したときに、実はその背後でGETリクエストが送られています。
このリクエストに対して、どんな応答を返すかを決めるのが`@GetMapping`です。

基本的な使い方

それでは、実際に@GetMappingを使った例を見てみましょう。以下のコードを見てください。

@GetMapping("/home")
public String showHomePage() {
    return "home";
}

このコードでは、ユーザーが「http://localhost:8080/home」のようなURLにアクセスしたときに、「home.html」というビュー(HTMLページ)を表示しています。すごくシンプルですよね!

ほかにも、

@GetMapping("/image")
public String showImage() {
    return "/images/sample.png";
}

とすれば、画像が直接表示され、

@GetMapping("/redirectHome")
public String redirectToHomePage() {
    return "redirect:/home";
}

と書くことで、/redirectHomeにアクセスした場合、自動的に/homeに転送されるなんてこともできます。

@GetMappingの使い方【応用編】

ここからは、もう少し詳しい使い方について説明します。
ここまで覚えれば@Getmappingは使いこなせるはずです!

1. URLパス内の変数を使う

@GetMappingを使って、URLに動的なパス変数を埋め込むことができます。例えば、特定の商品の詳細情報を表示する場合に、商品IDをURLに含めることができます。

@GetMapping("/product/{id}")
public String getProductById(@PathVariable("id") Long productId, Model model) {
    // ここで商品IDを使って商品を検索
    Product product = productService.findById(productId);
    model.addAttribute("product", product);
    return "productDetails";
}

説明:

  • @PathVariable("id")を使うことで、URLパスの中にある動的な値を取得できます。例えば、/product/5にアクセスした場合、idには5が入り、そのIDに対応する商品を取得します。
  • この方法により、ユーザーごとや商品ごとのページを簡単に作成できます。

2. クエリパラメータを使う

クエリパラメータ(?key=valueの形式)を使って、フィルタリングや検索機能を実装することもできます。

@GetMapping("/search")
public String searchProducts(@RequestParam(value = "name", required = false) String name, Model model) {
    List<Product> products;
    if (name != null) {
        products = productService.findByName(name);
    } else {
        products = productService.findAll();
    }
    model.addAttribute("products", products);
    return "productList";
}

説明:

  • @RequestParamを使うと、URLに含まれるクエリパラメータを取得できます。/search?name=coffeeのようにアクセスすると、nameパラメータにcoffeeが渡され、名前でフィルタリングされた商品が表示されます。
  • パラメータが指定されない場合には、全商品を返すなど、柔軟な検索・フィルタリングが可能です。

3. 複数のリクエストパスを対応させる

一つのメソッドで複数のリクエストパスに対応させたい場合、@GetMappingvalue属性に複数のパスを指定できます。

@GetMapping({"/home", "/dashboard"})
public String showHomePage() {
    return "home";
}

説明:

  • ここでは、/home/dashboardのどちらにアクセスしてもhome.htmlビューが表示されます。複数のパスに対して同じ処理を行いたい場合に便利です。

4. HTTPリクエストヘッダを利用する

場合によっては、リクエストヘッダをもとに処理を変えたいことがあります。@RequestHeaderを使うことで、リクエストに含まれるヘッダ情報を取得し、処理に活用できます。

@GetMapping("/headerInfo")
public String getHeaderInfo(@RequestHeader("User-Agent") String userAgent, Model model) {
    model.addAttribute("userAgent", userAgent);
    return "headerInfo";
}

説明:

  • ここでは、リクエストヘッダのUser-Agentを取得して、それをビューに渡しています。この情報を元に、ブラウザごとの表示を変えたり、特定のデバイス用のレスポンスを返すことが可能です。

5. @GetMappingでデフォルト値を設定する

クエリパラメータの指定がない場合にデフォルト値を設定することも可能です。@RequestParamにはdefaultValueという属性があり、指定しなかった場合でも値を設定できます。

@GetMapping("/products")
public String listProducts(@RequestParam(value = "sort", defaultValue = "asc") String sortOrder, Model model) {
    List<Product> products = productService.findAllSorted(sortOrder);
    model.addAttribute("products", products);
    return "productList";
}

説明:

  • defaultValue = "asc"を指定することで、ユーザーがクエリパラメータを渡さなかった場合でも、デフォルトで昇順(asc)で商品をソートして表示します。これにより、ユーザーの入力がない場合でも安定した結果を得ることができます。

6. カスタムレスポンスとしてJSONデータを返す

@GetMappingを使って、ビューを返すだけでなく、JSON形式のデータを返すこともできます。これは、APIを作成する際によく使われます。

@GetMapping("/api/products")
@ResponseBody
public List<Product> getProductsAsJson() {
    return productService.findAll();
}

説明:

  • @ResponseBodyを付けることで、ビューではなく、JSON形式のデータを直接返します。これにより、/api/productsにアクセスしたクライアントは、商品データをJSONとして受け取ることができます。
  • この方法は、Webアプリケーションだけでなく、モバイルアプリや外部システムとの連携でも便利です。

@GetMappingの引数

最後に、@GetMappingの引数について詳しく見ていきましょう。
ここまでくれば@GetMappingマスターですね!


@GetMappingでは、さまざまな引数を設定することができ、リクエストをより柔軟に処理することが可能です。

1. value属性

@GetMappingの最も基本的な使い方は、value属性を使ってURLパスを指定することです。これは、どのURLに対してこのメソッドが応答するのかを決定します。

@GetMapping(value = "/products")
public String getProducts() {
    return "products"; // products.htmlを表示する
}

この例では、/productsというURLにGETリクエストが来たときに、このメソッドが呼ばれます。

2. params属性

params属性を使うことで、リクエストパラメータに条件を追加することができます。これにより、特定のパラメータが含まれているリクエストだけを処理できます。

@GetMapping(value = "/search", params = "query")
public String search(@RequestParam String query, Model model) {
    model.addAttribute("results", searchService.find(query));
    return "searchResults"; // searchResults.htmlを表示する
}

この例では、/search?query=exampleというURLにGETリクエストが来たときに、queryパラメータが存在する場合にだけこのメソッドが呼ばれます。

3. produces属性

produces属性を使うことで、返すデータのメディアタイプを指定できます。これにより、リクエストに応じた適切なレスポンスを返すことが可能になります。

@GetMapping(value = "/api/data", produces = "application/json")
public @ResponseBody Data getData() {
    return new Data("example"); // JSONデータを返す
}

この例では、/api/dataにGETリクエストが来たときに、JSON形式でデータが返されます。

おわりに

使いどころ

では、実際に@GetMappingがどのように役立つのか、いくつかの具体的なシナリオを見てみましょう。

  1. ユーザーが特定のページにアクセスする場合: 例えば、あなたのWebアプリケーションには「About」や「Contact Us」などのページがあるとします。それぞれのページに対して@GetMappingを使うことで、ユーザーがブラウザでそのページにアクセスしたときに、正しい情報を返すことができます。
  2. データを取得するAPIエンドポイントを作成する場合: たとえば、商品リストを表示するAPIを作成する場合に@GetMappingを使います。ユーザーが「/products」というURLにアクセスすると、商品データを返すように設定できます。
  3. 検索機能の実装: ユーザーが検索クエリを入力して、その結果を表示するページを作成することもできます。@GetMapping@RequestParamを組み合わせることで、ユーザーが検索したい内容に基づいてデータを動的に取得し、表示することが可能です。

@GetMappingの強み

@GetMappingを使うことには、いくつかの素晴らしい利点があります。

  • シンプルさ: 使い方が非常に直感的です。複雑な設定をする必要がなく、誰でも簡単に理解できます。
  • 可読性: コードがすっきりとしていて、どこで何をしているのかが一目でわかります。
  • 特化性: HTTPメソッドに特化しているので、GETリクエストの処理が簡単に行えます。

まとめ

今回は、Springの@GetMappingについて詳しく見てきました。
GETリクエストを簡単に処理するための便利なツールで、初心者でもすぐに使いこなせるようになります。
ぜひこの機会に、実際にコードを書いてみてくださいね!これからのアプリケーション開発がもっと楽しくなるはずです!
もっと詳しく知りたい方は、Spring公式ドキュメントを参考にしてください。
また、もう少し@Getmappingの実践的な使われ方が見たい方はこちらの記事をどうぞ!↓↓

@PostMappingについて知りたい方はこちらをどうぞ!↓↓

タイトルとURLをコピーしました