目次
WhileLabel Error Pageが全然解決できない
SpringBootのスタータープロジェクトから簡単なアプリケーションを作っていてこのエラーにぶち当たった。完全にハマってしまい全く解決の糸口が見えない。 一週間ぐらい悩み続けてもう匙を投げかけてる。
ブラウザにフォームは表示されるが、フォームに値を入力したら遷移したページに”WhileLabel Page Error”が表示される。入力された値はデータベースのテーブルには格納されていない。
問題なのはコンソールが”Whitelabel Error Page”のエラーを吐かないからどこにエラーが出ているのか特定できないのだ。
何をやろうとしていたか
springbootをmysqlと接続してブラウザーのフォームから値を入力してmysqlにデータを格納するという至ってシンプルなアプリケーションを作っていた。
作っていたというよりは、このサイトに書かれているコードをコピペしてspringbootとmysqlの接続確認がしたかっただけなのだが。
単にコピペしたのに動かないという、、、掲載されているソースが間違っているという原因も考えられるが、、、
考えられるエラーの原因
エラーをインターネットの検索に投げて隈なく調べた結果、エラーだと思われる原因は一般的に考えて.
- アノテーションの入力ミスか未入力
- クラスファイルの設置場所を間違えている
- htmlの記述がどこか間違えている
- build.gardleファイルにおいて必要な記述が抜けてる
- application.propertyにおいて正確なmysqlの情報を記述していない
だと思って見直したが特に問題は見当たらなかった。
何かしらの問題がspringbootとmysqlとの間に発生しているか単純にクラスファイルの記述に見落としがあるのか。。。。
原因があると思われるソースファイル
バージョン情報
- Spring-Boot 2.6.3
- MYSQL 8.0.27
ファイルパス
Index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body >
<form method="post" th:action="@{/test1/testform}" th:object="${test1Form}">
<p><input type="text" th:field="*{id}"/></p>
<p><input type="text" th:field="*{name}"></p>
<p><input type="submit" value="送信ボタン"></p>
</form>
</body>
</html>
MainController.java
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/test1")
public class MainController {
@Autowired
private SyainRepository syainRepository;
@GetMapping()
public String disp1(
Model model) {
model.addAttribute("test1Form", new Test1Form());
return "test1/index";
}
@PostMapping("/test1")
public String disp2(Test1Form test1Form) {
Syain syain = new Syain();
syain.setId(test1Form.getId());
syain.setName(test1Form.getName());
syainRepository.insertSyain(syain);
return "redirect:/test1/";
}
}
build.gradle
plugins {
id 'org.springframework.boot' version '2.6.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
SyainRepository
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class SyainRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public SyainRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void insertSyain(Syain syain) {
jdbcTemplate.update("INSERT INTO syain(id,name) Values(?,?)",
syain.getId(),syain.getName());
}
}
application.properties
spring.datasource.url=jdbc:mysql://localhost/testphp
spring.datasource.username=*******
spring.datasource.password=*******
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
お手上げです。マジで誰か助けてください。これができないと次のステップに進めないのです。(泣)