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