@GetMappingを使って画面を表示する方法を完全解説!Spring Boot初心者向け
新人
「Spring BootでWeb画面を表示したいんですけど、@GetMappingってどうやって使うんですか?」
先輩
「@GetMappingは、URLとHTML画面を結びつけるときに使います。コントローラに付けて、どの画面を見せるかを指定するんだ。」
新人
「なるほど!でもどうやって画面と結びつけるんですか?」
先輩
「それじゃあ、@GetMappingの使い方を一緒に見てみよう!」
1. @GetMappingとは何か?
Spring Bootでは、Web画面にアクセスするためにURLと処理を結びつける必要があります。
@GetMappingは、その役割を担うアノテーションの一つで、
HTTPリクエストのうち「GETリクエスト」を処理するために使います。
例えば、ブラウザで「http://localhost:8080/hello」にアクセスしたときに、@GetMapping("/hello")と指定しておけば、 対応するJavaメソッドが呼び出され、HTML画面が表示される仕組みです。
Spring Bootでは、画面を表示するだけであれば、@RestControllerではなく@Controllerを使います。
実際に画面を返すには、テンプレートファイル(通常はThymeleaf)と組み合わせて動作します。
以下が基本のコード例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String showHelloPage() {
return "hello";
}
}
この例では、/helloというURLにアクセスすると、hello.htmlという画面を表示します。
実際のHTMLはsrc/main/resources/templatesフォルダに配置します。
2. 画面表示の仕組みと@GetMappingの関係
@GetMappingはURLとコントローラメソッドを結びつけます。 そして、そのメソッドが文字列を返すことで、対応するHTMLファイルをテンプレートフォルダから探して表示します。
たとえば、return "hello";と書いた場合、hello.htmlというテンプレートが表示されます。
ファイルは以下の場所に配置しましょう:
src/
└── main/
└── resources/
└── templates/
└── hello.html
ここで、hello.htmlの中身は以下のような単純なHTMLでも構いません。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello Page</title>
</head>
<body>
<h1>こんにちは、Spring Boot!</h1>
</body>
</html>
Pleiades環境でGradleプロジェクトを作成し、依存関係として「Spring Web」「Thymeleaf」を追加することで、 この仕組みがそのまま動作します。
実行後、ブラウザで「http://localhost:8080/hello」にアクセスすると、 上記のHTMLが表示され、Spring Bootの画面表示が成功します。
これは、いわゆる「画面 表示 方法」として基本中の基本であり、初心者が最初に覚えるべきパターンです。 @GetMappingとは何か、画面を表示するにはどうすればいいか、その基本構造を理解しておきましょう。
3. @GetMappingでリクエストを受け取り、HTMLを返すまでの流れ
Spring Bootで@GetMappingを使って画面を表示するには、いくつかの流れがあります。まず、ユーザーがブラウザからURLにアクセスします。次に、そのURLに対応した@GetMappingの付いたメソッドが呼び出されます。そして、そのメソッドから返された文字列に基づいて、ThymeleafテンプレートのHTMLが表示される仕組みです。
ここでは、@GetMapping 使い方として最も基本的なパターンを具体的に確認しましょう。
以下のコントローラクラスを見てください。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class WelcomeController {
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome";
}
}
この例では、http://localhost:8080/welcomeというURLにアクセスすると、welcome.htmlというHTMLファイルを表示するようになります。
重要なポイントは、戻り値が「ファイル名だけ」であり、「拡張子.html」は不要ということです。 Spring BootとThymeleafの連携により、自動でテンプレートフォルダからHTMLを探してくれるのです。
HTMLファイルの場所は、src/main/resources/templatesです。この場所にテンプレートを配置しなければ、正しく画面は表示されません。
初心者がよくつまずくポイントは、HTMLファイルの配置場所やファイル名のミスです。
ファイル名はwelcome.htmlのように小文字で統一し、return "Welcome";のように大文字にしてしまうと、画面が見つからないエラーが出ることがあります。
4. Thymeleafテンプレートと連携する基本的な使い方
Spring BootでHTMLを表示するには、テンプレートエンジンとしてThymeleaf(タイムリーフ)を使うのが一般的です。
@Controllerと@GetMappingでメソッドを定義し、HTMLを返すことで、動的なWeb画面が作れます。
まずは、テンプレートHTMLを用意しましょう。以下はwelcome.htmlのサンプルです。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Welcome Page</title>
</head>
<body>
<h1 th:text="'ようこそ、' + ${userName} + 'さん!'">ようこそ!</h1>
</body>
</html>
上記のように、Thymeleafではth:text属性を使って、動的に文字列を表示できます。ここでは、コントローラからuserNameというデータを渡して表示しています。
それでは、テンプレートに値を渡すコントローラのコードを紹介します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class WelcomeController {
@GetMapping("/welcome")
public String showWelcomePage(Model model) {
model.addAttribute("userName", "佐藤");
return "welcome";
}
}
ここでのポイントは、引数にModelを指定し、addAttributeメソッドでテンプレートにデータを渡していることです。
このようにすることで、HTMLテンプレート側で変数のようにデータを扱えます。
実行すると、「ようこそ、佐藤さん!」という画面がブラウザに表示されます。
これはSpring Boot HTML表示の基本であり、Thymeleaf 表示の基礎でもあります。
初心者がつまずきやすい注意点としては、以下のような点があります。
- HTMLファイルの拡張子は必ず
.htmlで保存する templatesフォルダの下に置かないと読み込まれないxmlns:th="http://www.thymeleaf.org"がないとth:textなどが動作しない
また、テンプレートに渡す変数名とHTML内の参照が一致していないと、画面に何も表示されないことがあります。
userNameという変数を渡したのに、テンプレートで${username}と書くと、データが見つからないというエラーになります。
このように、@GetMappingを使ってURLからのリクエストを受け取り、
Modelを通してThymeleafにデータを渡し、HTMLテンプレートで表示するという流れは、
Spring BootでWebアプリケーションを作成する上で必ず理解しておくべき基本です。
次回は、GETリクエストにパラメータを付けて、HTML画面に動的な情報を表示する方法について紹介します。
5. @GetMappingとModelの使い方(データの受け渡し)
Spring BootでWeb画面に動的なデータを表示するには、@GetMappingのメソッド内でModelを使ってデータをHTMLに渡す必要があります。
Modelは、テンプレートにデータを渡すための仕組みで、コントローラからHTMLへ値を届ける橋渡しの役割をします。
たとえば、以下のようにコントローラで「メッセージ」というデータをModelに入れて渡すことができます。
@GetMapping("/message")
public String showMessagePage(Model model) {
model.addAttribute("msg", "これはModel経由のメッセージです");
return "message";
}
上記では、msgという名前で「これはModel経由のメッセージです」という文字列を渡しています。
HTMLテンプレート側では、${msg}と書くことでこの値を表示できます。
実際のHTMLファイルはsrc/main/resources/templates/message.htmlに置き、以下のように記述します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>メッセージページ</title>
</head>
<body>
<p th:text="${msg}">メッセージがここに表示されます</p>
</body>
</html>
画面を表示すると、Modelで渡したメッセージがそのままHTMLに反映されて表示されます。
これは、@GetMapping Modelを使った基本的なデータ受け渡し方法です。
初心者が注意すべき点は、addAttributeで使ったキー名と、HTML側で参照する変数名が必ず一致していなければならないことです。
たとえば、コントローラでmsgと渡しているのに、HTMLで${message}と書いてしまうと、値が表示されません。
また、Modelを使用するには、メソッドの引数にModel modelを明示的に書く必要があります。
これを忘れると、addAttributeを使おうとしてもコンパイルエラーになります。
Spring BootとThymeleafを使って動的な画面を作るためには、このModelの使い方をしっかり身につけることが重要です。
6. よくあるエラーとその対処法(画面が表示されない・パスが違うなど)
Spring Bootで画面が正しく表示されないとき、初心者がよく陥るエラーにはいくつか共通点があります。 ここでは、「画面が表示されない Spring Boot」や「テンプレート パス エラー」といった問題の原因と対処法を詳しく解説します。
最も多いエラーのひとつは、「テンプレートファイルが見つからない」というエラーです。
これは、return "hello"のようにファイル名を指定していても、該当するHTMLファイルがtemplatesフォルダの中に存在しない場合に起こります。
テンプレートファイルの正しい配置場所は以下のとおりです。
src/
└── main/
└── resources/
└── templates/
└── hello.html
上記以外の場所にHTMLファイルを置いても、Spring Bootはテンプレートとして認識しません。 ファイル名の綴りが間違っている場合も、同様にエラーになります。
また、以下のような記述ミスもよくあるエラーの原因になります。
- コントローラの戻り値に
return "Hello";と書いて、HTMLファイルはhello.htmlと小文字 → パス不一致 - テンプレート内の変数名が間違っている → Modelで
userNameを渡しているのに、HTMLでは${username}と書く - テンプレートに
xmlns:th="http://www.thymeleaf.org"を書き忘れる →th:textなどが動かない
画面に何も表示されないときは、まずテンプレートの場所とファイル名、そして@GetMappingで返している文字列を見直しましょう。
次に多いのが、URLパスが一致していないケースです。
たとえば、ブラウザでhttp://localhost:8080/helloにアクセスしても、@GetMapping("/hello")が定義されていなければ、画面は表示されません。
この場合の解決法は、コントローラクラス内で正しく@GetMappingを指定することです。
@Controller
public class HelloController {
@GetMapping("/hello")
public String showHelloPage() {
return "hello";
}
}
上記のように、URLとコントローラのマッピングを明示することで、正しいHTMLテンプレートが表示されるようになります。
それでも表示されない場合は、プロジェクト構成を見直し、Gradleの設定や依存関係にThymeleafとSpring Webが追加されているかを確認してください。 Pleiadesではプロジェクト作成時にチェックを入れることで自動的に依存関係が追加されます。
最後に、コンソールログやエラーメッセージも大切なヒントになります。
画面が真っ白なときや、Whitelabel Error Pageと表示されたときは、パスの設定かテンプレートの場所が原因の可能性が高いです。
Spring Bootでは、URLとHTMLテンプレートを結びつける@GetMappingの使い方、Modelの使い方、テンプレートの正しい配置を理解することが、安定したWeb開発の第一歩です。
小さなミスでも画面が表示されなくなるため、コードの記述やファイルの配置には十分注意しましょう。