こんにちは。タグボード開発チームのワシヅカです。
昨日は新宿の就職博へブース出展しておりました。弊社のブースへ足を運んでいただいた皆さま。本当にありがとうございました(^^)
さて、早速ですが第3回をはじめましょう!
今回は第2回で扱った、サンプルプログラムを読み解いていきたいと思います。
どんな流れで動いているかを中心に見ていきたいと思います。
1.Spring Tool Suite(STS)で行数を表示する
…とその前に。このままでは読みにくいので、行数を表示しておきましょう。
メニューバーの[ウィンドウ]→[設定]と進んで、以下の画面が表示されたら、
[一般]→[エディタ]→[テキストエディタ]とクリックしていきます。
そして、右側の「行番号の表示」にチェックを入れて「適用して閉じる」をクリックしてください。
これで行番号が表示されるようになります。
2.ブレイクポイントを付ける
次にブレイクポイントを付けましょう。
ブレイクポイントを付けるとデバッグモード時に、処理がその部分を通過した場合、止まってくれます。
STS(Spring Tool Suite)では、行番号の左の部分をダブルクリックすると、ブレイクポイントを付けてくれます。
まずは、以下の画像の3点にブレイクポイントを付けてみましょう!。
●ブレイクポイント1:Application.javaの10行目付近
●ブレイクポイント2:MainController.javaの21行目付近
●ブレイクポイント3:MainController.javaの34行目付近
3.デバッグモードで起動する
それでは、デバッグモードで起動してみましょう。
下の画像の赤枠で囲んだ中に、緑の虫のようなアイコンがあると思いますが、そのボタンをクリックします。
※下の画像のように、虫の隣の「▼」をクリックすると、どの設定でデバッグ起動するか選択できます。
万が一エラーが発生した場合は、2重起動している可能性もありますので、■ボタンを押して、アプリケーションをを停止してもう一度試してください。
4.ブレイクした地点を確認する
デバッグ起動した途端、ブレークしました。
の見慣れたmainメソッドです。ここから処理は起動され、次のSpringApplication#runによりWebアプリケーションが立ち上がります。ブレイクポイントから先に進む場合はF8キーを押してください。
Applicationクラスに@SpringBootApplicationというアノテーションが着いていますが、頭の片隅に「起動時にSpringBootの機能設定を自動でやってくれる」アノテーションなんだ程度に留めておきましょう。
5.URLとのマッピングを確認する
起動が一通り終わったら、次にブラウザを起動して、http://localhost:8080/demo/allへ遷移してみましょう。
36行目のポイントでブレークしたようです。このメソッドが呼び出される秘密は青枠で囲った「@RequestMapping」、「@GetMapping」がポイントとなります。
改めてアプリケーションを起動したときのコンソールを覗いて見てください。
このようなログが出力されていると思います。
「/demo/all」を「MainController.getAllUsers()」、「/demo/add」を「MainController.addNewUser()」
へマッピングしたよとログに出力されています。今回の場合、MainControllerクラスに”/demo”がマッピングされ、そのMainControllerクラスのgetAllUsersメソッドに”/all”がマッピングされており、合わせ技で”/demo/all”、”/demo/add”へのマッピングとなっています。
クラスやメソッドの上に@RequestMapping(path=”…”)や@GetMapping(path=”…”)と書くことで起動時にURLとHTTPリクエストメソッドがマッピングされるのです。以前StrutsのようなフレームワークではこうしたマッピングはXMLで管理していましたが、このようにアノテーションを書くだけで簡単に実現できてしまいます。
6.URLとのマッピングを追加する
それでは試しに新しいURLとHTTPリクエストメソッドのマッピングを追加してみましょう。MainControllerクラスの中に、以下のコードを追加してみてください。Userテーブルの件数を返却するプログラムです。
さて、実際にブレークポイントを張って、ブラウザからアクセスしてみましょう。
見事に新しく追加したgetCountメソッドの中で止まりました。F8キーを押して先に進みましょう。
件数が画面に表示されました。
0と表示されてしまった方は、データを追加して試してみてください。
前回同様、以下のURLでデータ追加可能です。
http://localhost:8080/demo/add?name=user01&email=email01
7.起動時にテーブルが生成されないようにする
前回少しお話しましたが、データを追加したのに0件と表示されてしまった場合、アプリケーション起動時にテーブルが生成されるような設定になっています。起動の度にテーブルが生成されるため、テーブルがリセットされてしまっています。追加したデータを残しておきたい場合は、下の画像ように「none」と設定してください。
8.POSTリクエストにも対応する
さて、@GetMapping(“…”)は、Getメソッドに対応するアノテーションですが、POSTメソッドでもアクセスしたい場合はどうすればよいでしょうか。
試しにMainControllerクラスのaddNewUserメソッドのアノテーションを以下のように修正してみましょう。
RequestMethodは、新たに「org.springframework.web.bind.annotation.RequestMethod」のインポートが必要ですので、エラーのアイコンをダブルクリックしてウィザードを呼出し、importしておきましょう。
9.POSTリクエストでアクセスしてみる。
修正が終わったら、chromeのアドオンツールである「Advanced REST client」というツールを使ってPOSTリクエストして確認してみましょう。
「Advanced REST client」の詳細な使用方法は割愛しますが、以下のような内容で送信します。下の画面を参考に設定してみてください。設定が終わったら右上の「SEND」ボタンをクリックします。もちろん、STSはデバッグ状態で起動したままですよ。
| Method | POST |
| Body Content type | application/x-www-form-urlencoded |
| name | hogehoge |
| piyopiyo |
ブレークポイントに止まりました。見事にPOSTリクエストでもアクセスできるようになりました!送信されたパラメータも受信できています。
少々業業しいコード書きましたが、実は、@RequestMapping(path=”/all”)と書くだけでもアクセス可能です。
ただ、そのように書くとHEADリクエストや、DELETEリクエストでもアクセス可能になってしまいますので、セキュリティーとユーザーの利便性を考慮した上で、HTTPリクエストメソッドは最小限に設計しておいたほうが良いかと思います。
10.GETメソッドにしかマッピングされていない場合
参考までに、GETリクエストにしかマッピングされていないメソッドにPOSTリクエストでアクセスしてみると、
405HTTPエラーが返却されます。
11.まとめ
- URLとクラス・メソッドの紐付け(マッピング)は、アノテーションを使用する
- アノテーションには@RequestMapping(path=”…”)、@GetMapping(path=”…”)、@PutMapping(path=”…”)がある。(あまり使わないと思いますが、@DeleteMappingもあります。)
- GET/POSTどちらにも対応したい場合、@RequestMapping(path=”/add” , method = { RequestMethod.GET, RequestMethod.POST })のように記述が可能
- マッピングしていないリクエストメソッドでアクセスすると405エラーとなる
少し長くなりましたので、今回はこの辺で終わりたいと思います。次回は、同じサンプルプロジェクトを使ってDBアクセスまわりを見ていきたいと思います。
以上、タグボード開発チームのワシヅカでした。

















