【Spring Boot】Controllerが正しく動かない原因
Spring Bootプロジェクトで画面遷移のハンドリングが出来なかった時のエラー内容と原因をメモ。
画面からフォームボタンのPOSTリクエスト時。
リソースに辿り着けない。。

Controllerのソース
POSTリクエストでconfirm.htmlへ遷移させたい。
@Controller
public class MainController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String index() {
return "index";
}
@RequestMapping(value="/confirm", method=RequestMethod.POST)
public String confirm() {
return "confirm";
}
}
エラーの原因 : Controllerのクラスファイルの配置場所が正しくない。
Controllerをはじめ、Spring Bootプロジェクトで使用する全てのクラスファイルは
プロジェクトのmainメソッド(SpringApplication.run)がある起動クラスと同一パッケージ
もしくはその配下に配置しないと正しくロードされない。
パッケージの配置が正しくない状態
プロジェクトの起動クラスのパッケージと異なるパッケージに
Controllerのクラスファイルがある。

パッケージを正しい位置に変更

プロジェクトを再起動し、画面側の送信ボタンでControllerへPOSTリクエストする。
プロジェクト内でコンソールのログを確認する。
(一部のみ抜粋)
Controllerのクラスファイル名「MainController」で文字列検索
Mapped “{[/],methods=[GET]}” onto public java.lang.String example.presentation.controller.MainController.index()
2018-10-12 10:20:09.838 INFO 1002 — [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped “{[/confirm],methods=[POST]}” onto public java.lang.String example.presentation.controller.MainController.confirm()
2018-10-12 10:20:09.838 INFO 1002 — [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped “{[/confirm],methods=[POST]}” onto public java.lang.String example.presentation.controller.MainController.confirm()
Controllerクラスがロードされ、メソッドの呼び出しも確認できる。
エラーの落とし穴
プロジェクト起動後 http://localhost:8080/で初回アクセス時、
Controllerがロードされていなかった場合、
ファイル名がindex.htmlのテンプレートを自動で返す仕様となっているため
エラーに気付きにくかった。


