| |
Spring Bootのトラブルシューティングメモ
-
No qualifying bean of type...
・注入対象クラスが@SpringBootApplicationのついたアプリケーションクラスのパッケージ階層の外部にある。
-
No static resource ***
・これも同じです。"/***" のRequestMapping/PostMappingを持つControllerクラスが、
@SpringBootApplicationのついたアプリケーションクラスのパッケージ階層の外部にあると、
そのControllerは見つけられないので、静的文書 ***.html を探しに行こうとしてこのエラーになります。
-
a th:href=のリンクが有効にならない
・th:hrefはThymeleafの属性なので、HTMLファイルをtemplatesに置かないと有効になりません。
staticに置いているとリンクに整形されません。
-
プロパティ変数が注入されない(コンテナ管理対象にならない)
・使う側のクラスに @RequiredArgsConstructor を書いていない。
・プロパティ変数がfinalになっていない。
・注入されるクラスに @Component、@Service などを書いていない。
-
値がセッションに保存されない
・Controllerクラスに @SessionAttributes(value={"..."}, types={....class})を書いていない。
・Controllerクラスで @ModelAttribute("...Form") を付けて空のオブジェクトを返す初期化メソッドを書いていない。
・セッション属性名とクラス名が異なる場合に、@ModelAttribute("...Form") をメソッドの引数に付けていない。
-
@Validを含むメソッドでMethodArgumentNotValidException
BindingResult引数は、@Validを指定した引数の直後に置く必要がある。
直後ではない位置に置いた場合はこの謎のエラーの原因になります。
-
他クラスを継承したクラスにLombokの@Dataを使うとSTSに次のような警告が出る:
Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object...
@EqualsAndHashCode(callSuper = {trueかfalse(デフォルト)})
を明示的に指定すべきです。callSuper=trueはスーパークラスのequals()を参照する
(従って、スーパークラスのフィールドが比較対象になる)ことを、
falseはスーパークラスのフィールドを比較対象にしないことを指示します。
従ってほとんどの場合、Object以外のクラスを継承したならばtrueを指定することになるでしょう。
-
The type javax.servlet.http.HttpServletResponse cannot be resolved.It is indirectly referenced from required .class files
Spring Boot3はJakartaEEに移行済なので、javax.servletのクラスは参照できません。
javax時代に作った共通ライブラリを使おうとしても無理なので、jakarta.servlet版を作るしかない。
-
Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=**,...
build.gradleで指定したバージョンのJavaが開発機に入っていない。
バージョンは高ければいいという物でもないらしいので、選択したのと同じバージョンの物を入れる必要があります。
インストールしたら、コマンドプロンプトでjava -versionと打ってそのバージョンが出ることを確認し、
環境変数JAVA_HOMEにインストール先を指定してSTSを起動、build.gradleを右クリック⇒Gradle⇒Refresh Gradle Projectを実行します。

(first uploaded 2025/03/29 last updated 2026/01/27, URANO398)
|