💭

SpringBootでHello Worldできず

2023/07/09に公開

参考書の手順通りHelloControllerクラスからhello.htmlを呼び出したところSpringBootは動いていたようだが以下のエラー。

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jul 09 17:06:30 JST 2023
There was an unexpected error (type=Not Found, status=404). ←type=Internal Server Errorの場合もあった
No message available

これはHelloControllerファイルのディレクトリ配置が間違っていた。
DemoApplicationにMainメソッドがありコンポーネントスキャン※1という範囲から外れていたようだ。
正しい配置は以下となる。
demo/
├src
├main
├java
├com
├example
├demo
├hello
│ └HelloController.java
├DemoApplication.java

なお、配置を直すと
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jul 09 16:38:02 JST 2023
There was an unexpected error (type=Internal Server Error, status=500).
Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers
at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869)
at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607)
以下略

このエラーはhello.htmlが見つからないというエラーのようだが、ディレクトリ配置はあっていて、Spring公式のサンプルコードでは問題なく動いたのでhtmlにも問題はないと判断。
公式コード
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}

結論から言うと原因不明で知らぬ間に直ってしまった。
リビルドなども試したが直らず、直ってからは再現できず、コードは間違っていなかったと思うが不確定。


追記 2023/07/22

再発したので今度こそ直そうと思い結構調べたところ、EclipseのMavenプロジェクトの更新を実行すると壊れることが判明。
pom.xmlを修正した後に実行するのだがそれで壊れるようだ。
回避方法としてはEclipse→実行→Maven clean→Maven installで回避できる。
わからないのが、今回までにpom.xmlは何度か追記してきたし問題なかった。
プロジェクトを新規に作りHello Worldするという最小限のテスト?をしてみたがやはり同じだった。これについては本稿の段階で課題になった再現といえる。
Eclipse依存の可能性もあるが一旦スキップして先に進もうと思う。

解決 2023/12/10

ビルドパスの除外設定にresourcesフォルダすべて設定されていることが原因でした。
私の環境かもしれないがSpring bootの講座等を受けていると毎回同じ事象が発生するのでデフォルトなのかな。PV数的に躓く人多いのでは。


除外を除去してOK


過程で調べたこと
-アノテーション
・@RequestMapping
@RequestMapping("/")
public ModelAndView index() {
ModelAndView model = new ModelAndView();
model.setViewName("hello");
return model;
}
指定したURL("/")にアクセスするとmodel.setViewName("hello")が表示されるという仕組み。
helloの部分は拡張子が省略。

http://localhost:8080/
@RequestMapping("testpage")とすると
http://localhost:8080/testpage
でhello.htmlにアクセスできる。

◆開発環境
=Eclipse=
・SpringBoot

Discussion