SpringBoot入門のサンプルプロジェクトが動作しない

IT, Java

業務ではもっぱらSpringMVCを弄っていますが、
自宅ではSpringBoot触りたい。
そう思って、ネットで「SpringBoot入門」を検索しました。
良さげな入門サイトを見つけたので、
SpringBootのサンプルプロジェクトを作ることに。
しかし……速攻で詰まりました。
入門サイトの通りにController、htmlを書いているのになぜか動作しないのです。
複数サイトを回って、そのサイト通りに作成しても全て動作せず、
ローカル環境を疑ってSTSのバージョンを変更しても動作せず、
頭にきて入門用の本を買って試行してもうまくいかず、
正直、途方にくれました。


発生しているエラー

入門サイト通りにController・htmlを実装し、
http://localhost:8080/hello
↑みたいなURLを叩くとエラー画面が表示されます。


原因調査

RequestMappingの書き方が間違っている? → 問題なし
Thymeleafがうまく導入できていない? → 問題なし
STSのバージョンの問題? → どのバージョンでも同じようにエラーが発生する。
Mavenのローカルリポジトリが悪さを? → 関係ない
pom.xmlの書き方がミスっている? → どの入門サイトの書き方でもNGになる。
色々調査しましたが、中々原因を見つけられませんでした。


原因

原因は@SpringBootApplicationがついたhogeApplication.javaと
controllerクラスを別のパッケージに置いたことでした。
@SpringBootApplicationhaはデフォルトの場合、
同パッケージor子パッケージしかスキャンしないようです。
よってcontrollerクラスを他のパッケージに置いてもスキャンされないため、
mappingがうまくいかずエラーになります。


解決策

@SpringBootApplicationhaを付与したhogeApplication.javaと同じパッケージ、
または子パッケージにControllerクラスを配置してやればOKです。
または@SpringBootApplicationにscanBasePackages属性を追加し、
スキャンするパッケージを指定すれば、指定パスもスキャンするようになるようです。


まとめ

気付くのに数日要しました。
入門サイトで勉強する初心者の方は気をつけてください。

IT, Java

Posted by raishin