0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Spring入門】付録B よくあるエラーと対処法

0
Last updated at Posted at 2026-10-06

この教材を進める中で出会いやすいエラーを、場面ごとにまとめました。エラーが出たら、まず表示されたメッセージの中の特徴的な言葉(ORA- の番号や英語のキーワード)を、このページで探してみましょう。

B.1 エラーを読むコツ

エラーメッセージは長くて英語ばかりなので、最初は読む気がしないかもしれません。しかし、見るべき場所はだいたい決まっています。

コンソールのエラーは「一番下の Caused by:」を見る

Eclipse のコンソールに赤い文字で長いメッセージが出たら、上から全部読む必要はありません。次の順で探しましょう。

  1. ERROR と書かれた行を探し、その行の最後の文章を読みます。何が失敗したかの概要が書かれています。
  2. メッセージを下へスクロールし、一番下にある Caused by: の行を読みます。これが 本当の原因 であることが多いです。
  3. ORA-01017 のような ORA- で始まる番号 があれば、それはデータベース(Oracle)からのエラーです。番号でこのページを検索してください。
コンソール(例)
... ERROR ... Application run failed
org.springframework.beans.factory.BeanCreationException: ...
    at ...(たくさんの at 行が続く。ここは読み飛ばしてよい)
...
Caused by: java.sql.SQLException: ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

ブラウザのエラーは「status」と「message」を見る

Chrome に Whitelabel Error Page という画面が表示されたら、Spring がエラーを返しています。画面の中の status(ステータスコード)と、その下の説明文を見ましょう。ステータスコードの意味は 第1章 1.2 で説明しています。

画面イメージ:http://localhost:8080/employee

Whitelabel Error Page

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

There was an unexpected error (type=Not Found, status=404).

500(サーバー内部のエラー)の場合、ブラウザには詳しいことが表示されません。Eclipse のコンソール にエラーの詳細が出ているので、そちらを確認してください。

英語のエラー文の読み方の例

よく出る英語 意味
could not be found / not found 見つからない
required a bean of type ... …という型の Bean(Spring が管理する部品)が必要
already in use すでに使われている
not supported 対応していない(使えない)
cannot be found on object of type ... …という型のオブジェクトの中に見つからない
Failed to convert ... …の変換に失敗した(文字を数値にできない、など)

【便利な使い方】エラーは「どこで」「何が」を探すゲーム

エラーメッセージには、たいてい「どのクラス・どのファイル」で「何が」起きたかが書かれています。クラス名やファイル名、自分で付けた名前(employeeRepository や registerForm など)が出てきたら、そこが手がかりです。

B.2 起動時のエラー

Eclipse でアプリを起動したとき、コンソールに赤い文字のエラーが出て止まってしまう場合です。

データベースに接続できない

エラー表示
原因 対処
ORA-01017 ユーザー名/パスワードが無効です
ユーザー名かパスワードが違う application.properties の spring.datasource.username と password が empapp になっているか確認します。第3章でユーザーを作成したかも確認します(第3章 3.3)
ORA-12514 リスナーは接続記述子でリクエストされたサービスを現在認識していません
サービス名が違う spring.datasource.url の最後が /XEPDB1 になっているか確認します(:XE や /XE ではありません)
ORA-12541 リスナーがありません / IO エラー 接続が拒否されました
Oracle Database が起動していない Windows のスタートメニューで「サービス」と検索して開き、OracleServiceXE と OracleOraDB21Home1TNSListener の状態が「実行中」か確認します。止まっていたら、右クリック →「開始」を選びます(第2章 2.3)

ポートが使われている

エラー表示
原因 対処
Port 8080 was already in use.
アプリを 二重に起動 している(前に起動したアプリが動いたまま) Eclipse のコンソールの赤い四角(終了)ボタンで、動いているアプリを停止してから起動し直します。
コンソールが複数あるときは、コンソールのツールバーの「コンソールの表示」ボタン(モニターの形のアイコン)で切り替え、古い実行もすべて止めます。
Boot ダッシュボードを使っている場合は、そこからも停止できます。
Port 8080 was already in use. (Eclipse のアプリをすべて止めても出る)
Eclipse が異常終了したときなどに、前に起動したアプリの Java(javaw.exe)が残っている Eclipse を終了してから、Ctrl + Shift + Esc でタスク マネージャーを開き、「詳細」タブで javaw.exe を選んで「タスクの終了」を押します。そのあと Eclipse を起動し直します。
SQL Developer など、ほかの Java で動くソフトも止まることがあるので、先に終了しておきます。

【ご注意】Eclipse 以外のソフトが 8080 番を使っている場合

Eclipse のアプリを止めても解決しないときは、他のソフトが 8080 番を使っている可能性があります。Windows の「リソース モニター」(スタートメニューで「リソース モニター」と検索)の「ネットワーク」タブ →「リッスン ポート」で、ポート 8080 を使っているプログラムを確認できます。心当たりのあるソフトを終了するか、パソコンの管理者に相談してください。Oracle の 1521 番も同じ方法で確認できます。

部品(Bean)やクラスが見つからない

エラー表示
原因 対処
Field ... in ... required a bean of type '...' that could not be found.
@Autowired で受け取ろうとした部品を、Spring が見つけられない 受け取る側のクラスに @Component・@Repository などを付け忘れていないか確認します。クラスが com.example.employeeapp パッケージの 下 にあるかも確認します(第5章 5.2)
Not a managed type: class ...
Entity として認識されていない Entity クラスに @Entity が付いているか、entity パッケージが com.example.employeeapp の下にあるかを確認します(第6章 6.4)
No property 'xxx' found for type 'Employee'
Repository のメソッド名と、Entity のフィールド名が合っていない たとえば findByEmpId なら、Employee に empId というフィールドが必要です。大文字・小文字も含めて確認します(第7章 7.2)
Failed to load driver class oracle.jdbc.OracleDriver ClassNotFoundException: oracle.jdbc.OracleDriver
Oracle に接続するためのライブラリ(Oracle Driver)がプロジェクトに入っていない 第4章でプロジェクトを作るときに「Oracle Driver」を選び忘れています。プロジェクトを右クリック → Spring → スターターの追加 で「Oracle Driver」を追加します(第4章 4.1)
A '@JoinColumn' references a column named 'xxx' but the target entity '...Department' has no property which maps to this column
@JoinColumn の referencedColumnName の値が、Department のフィールド名と合っていない Employee の @JoinColumn(name = "DEPT_ID", referencedColumnName = "deptId") の deptId が、Department クラスのフィールド名と同じつづりかを確認します(第6章 6.3)

気にしなくてよいメッセージ

【知識メモ】WARN HHH100123: Low default JDBC fetch size

起動時に黄色っぽい「WARN」でこのメッセージが出ることがありますが、データベースとの通信の調整に関する助言で、アプリの動作には影響しません。「WARN」は警告、「ERROR」は失敗です。ERROR が出ていなければ、起動は成功 しています(第4章 4.4)。

B.3 画面表示時のエラー

アプリは起動したが、Chrome で画面を開いたり、ボタンを押したりしたときに出るエラーです。

エラー表示
原因 対処
Chrome に「このサイトにアクセスできません」 (localhost で接続が拒否されました)
Chrome 自身のエラー画面で、アプリに接続できていない。Whitelabel エラー画面とは違い、Spring は返事をしていない アプリを起動していないか、起動に失敗しています。Eclipse のコンソールに Started EmployeeAppApplication が出ているか確認します。URL のポート番号が 8080 になっているかも確認します(第4章 4.4)
Whitelabel Error Page status=404(Not Found)
その URL を受け付ける処理がない ブラウザに入力した URL の打ち間違い(/employee と /employees など)を確認します。
Controller の @GetMapping・@PostMapping の URL、テンプレートの th:action・th:href の URL が一致しているか確認します。
Controller を追加・変更した後にアプリを再起動したかも確認します。
テンプレートと Controller のどちらの間違いかは、付録D の方法で切り分けられます。
status=405(Method Not Allowed)
GET と POST の種類が合っていない @PostMapping で受ける処理に、フォームの method="post" を付け忘れていないか確認します(第9章 9.6)。
POST で受ける URL(例:/employees/3/delete)を、アドレス欄に直接入力して開くと GET になるため 405 になります。
テンプレートと Controller のどちらの間違いかは、付録D の方法で切り分けられます。
status=400(Bad Request)
リクエストの値の形が合わない URL の社員IDの部分(/employees/abc/edit など)が数字になっているか確認します。
実際に送られた URL は、付録D の方法で確かめられます。
status=500 TemplateInputException Error resolving template
Controller が返したテンプレート名のファイルが見つからない Controller の return "employee/list"; と、src/main/resources/templates/employee/list.html の場所・ファイル名が一致しているか確認します(第8章 8.8)。
この教材の URL は /employees(複数形)ですが、テンプレートのフォルダーは employee(単数形)です。return "employees/list"; と書くと、このエラーになります。
エラー表示が Error resolving template [redirect] のときは、return "redirect"; のように、redirect: の後ろの URL が抜けています。
status=500 TemplateInputException An error happened during template parsing
テンプレートの th: 属性の書き方が間違っていて、Thymeleaf がテンプレートを読めない コンソールの Caused by: に、テンプレート名と行・列が出ます。たとえば Could not parse as expression: "@{/employees/register" (template: "employee/list" - line 11, col 24) なら、list.html の 11 行目で } が抜けています。
Attribute name cannot be null or empty のときは、th: href のように th: の後ろに空白が入っています。この場合は行番号が出ないので、そのテンプレートの th: をすべて見直します。
Property or field 'xxx' cannot be found on object of type '...'
テンプレートの ${employee.xxx} に対応するゲッターがない ${employee.gender} なら getGender() が必要です。テンプレートの名前とゲッター名のつづりを確認します
Neither BindingResult nor plain target object for bean name 'registerForm' available as request attribute
テンプレートの th:object="${registerForm}" に対応するフォームが Model に入っていない Controller で model.addAttribute("registerForm", ...) をしているか、@SessionAttributes・@ModelAttribute の名前とテンプレートの名前が一致しているか確認します(第10章 10.10)
Missing URI template variable 'empId'
URL の {empId} に値が渡されていない @{/employees/{empId}/delete(empId=${employee.empId})} のように、後ろのかっこで値を渡しているか確認します。@PathVariable を付けた引数の名前(empId)も確認します(第9章 9.6)
表示はされるが、データの部分が空になる
Model に入れた名前と、テンプレートで使う名前が違う Controller の model.addAttribute("employees", ...) と、テンプレートの ${employees} のつづりを確認します。エラーにならないので気づきにくい間違いです
画面のデザインが崩れる(CSS が効かない)
CSS ファイルの場所か、読み込むパスが違う src/main/resources/static/css/app.css にあるか、テンプレートが th:href="@{/css/app.css}" になっているか確認します。Chrome で Ctrl + F5(キャッシュを使わずに再読み込み)も試します

B.4 データベースのエラー

エラー表示
原因 対処
ORA-65096 共通ユーザーまたはロール名が無効です
ユーザーを作るときに、アプリ用のデータベース(XEPDB1)ではなく、コンテナ・データベース(XE)に接続している SQL Developer の接続のプロパティで、「SID」の xe ではなく 「サービス名」の XEPDB1 を指定して接続し直します(第3章 3.3)。
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL; で XEPDB1 と表示されれば正しい接続です
ORA-02289 順序が存在しません
シーケンスが見つからない 第3章の CREATE SEQUENCE を実行したかを、SQL Developer の XE_EMPAPP 接続の「順序」で確認します(第3章 3.5)。
Entity の @SequenceGenerator の sequenceName のつづりが、SEQ_DEPT・SEQ_EMP と同じかを確認します
ORA-00942 表またはビューが存在しません
テーブルが見つからない Entity の @Table(name = "EMPLOYEE") のテーブル名のつづりを確認します。
テーブルを empapp 以外のユーザー(system など)で作ってしまっていないか、SQL Developer の XE_EMPAPP 接続の「表」で確認します(第3章 3.5)
ORA-00904 無効な識別子です
列名が違う Entity のフィールド名が、第3章で作ったテーブルの列名と対応しているか(deptId → DEPT_ID)、@JoinColumn(name = "DEPT_ID", referencedColumnName = "deptId") の列名が合っているか確認します
ORA-01400 NULL は挿入できません
必須(NOT NULL)の列に値がないまま登録しようとした 第11・12章の時点では入力チェックがないため、空欄のまま登録するとこのエラーになります。第13・14章で入力チェックを追加すると防げます(第11章 11.6)
ORA-02292 整合性制約に違反しました - 子レコードがあります
社員から参照されている部署を削除しようとした この教材のアプリは部署を削除しないので、通常は出ません。SQL Developer で部署を削除したいときは、先にその部署の社員を削除します
ORA-02449 外部キーにより参照される一意/主キーが表にあります
社員テーブルより先に部署テーブルを DROP しようとした DROP は EMPLOYEE → DEPARTMENT の順に行います(第3章 3.8)
ORA-00001 一意制約に反しています
同じ主キーの値を2回登録しようとした 社員ID・部署IDは自動で採番されるので、この教材では通常は出ません。INSERT 文で ID を自分で指定していないか確認します

エラーは出ないが、おかしいとき

症状
原因 対処
SQL Developer では見えるのに、アプリの一覧やテストに出てこない(件数が合わない)
SQL Developer で COMMIT していない SQL Developer のワークシートで COMMIT; を実行します。コミットするまでは、他の接続(アプリ)からはデータが見えません(第3章 3.6)
社員ID が 1, 2, 4 のように飛んでいる
削除した、または登録に失敗したことがある エラーではありません。 シーケンスは、一度払い出した番号や失敗で消費した番号を再利用しません。番号を 1 からそろえたいときは、第3章の手順でシーケンスとテーブルを作り直します(第3章 3.8)

B.5 入力チェック・セッション関連のエラー

入力チェック(第13・14章)

症状・エラー表示
原因 対処
@NotBlank などが赤い下線になる(import できない)
第4章でプロジェクトを作るときに Validation を選び忘れた プロジェクトを右クリック → Spring → スターターの追加 で「Validation」を追加します(第13章)
空欄のまま「確認」を押しても、エラーにならず確認画面に進んでしまう
Controller の引数に @Validated を付け忘れている confirm メソッドの引数を @Validated @ModelAttribute RegisterForm registerForm にします
入力画面に戻らず、Whitelabel エラー画面(status=400)になる
BindingResult の位置が違う BindingResult は、チェックするフォームの引数の すぐ後ろ に書く決まりです。間に Model などを挟まないでください
エラーメッセージが {name.notBlank} のように、キーのまま表示される
messages.properties にそのキーがない、またはファイルの場所・名前が違う src/main/resources/messages.properties にあるか、アノテーションの {...} とファイルのキーのつづりが一致しているか確認します
エラーメッセージが文字化けする
messages.properties の文字コードが UTF-8 になっていない ファイルを右クリック → プロパティー → リソース で「テキスト・ファイルのエンコード」を UTF-8 にし、メッセージを入力し直します(B.6)
エラーメッセージが表示されない
テンプレートにエラー表示の行がない、または項目名が違う th:if="${#fields.hasErrors('name')}" と th:errors="*{name}" の項目名が、フォームのフィールド名と一致しているか確認します

セッション(第10〜12章)

症状・エラー表示
原因 対処
NotSerializableException(開発中は起きないことが多く、本番の複数サーバー構成などで起きる)
セッションに保存するフォームが Serializable になっていない public class RegisterForm implements Serializable にします(第10章 10.4)
URL に ;jsessionid=... が付く
セッションID を URL で扱う設定になっている application.properties に server.servlet.session.tracking-modes=cookie を追加します(第10章 10.3)
登録した直後に「戻る」で確認画面に戻り「登録」を押すと、一覧に戻る
正しい動きです 登録が終わるとセッションの入力内容は破棄されるため、二重登録を防ぐために一覧に戻しています(第11章 11.5)

B.6 Eclipse のトラブル

症状
原因 対処
プロジェクトに赤い × 印が付く
ライブラリのダウンロードが途中で止まった、設定が古い など プロジェクトを右クリック → Maven → プロジェクトの更新 を選び、「OK」を押します(第4章 4.1)
クラス名に赤い下線が引かれる(〜に解決できません)
import が足りない 赤い下線の語の末尾にカーソルを置いて Ctrl + Space を押し、候補から選び直します(import 文が追加されます)。同じ名前のクラスが複数ある場合は、jakarta.persistence・org.springframework などのパッケージ名を見て選びます(第4章)
コードを直して保存したのに、動きが変わらない
アプリに変更が反映されていない コンソールの赤い四角でアプリを停止してから、もう一度起動します。ファイルを保存しただけでは、動いているアプリには反映されません
日本語が文字化けする(画面・メッセージ・ファイル)
ファイルの文字コードが UTF-8 でない ファイル(またはプロジェクト)を右クリック → プロパティー → リソース で「テキスト・ファイルのエンコード」を「その他:UTF-8」にします。ワークスペース全体の設定は 第2章 2.2 を参照してください
Spring スターター・プロジェクトの作成画面でエラーになる・先に進めない
インターネットに接続できない(start.spring.io に接続できない) インターネットに接続されているか確認します。会社のネットワークでプロキシの設定が必要な場合は、ウィンドウ → 設定 → 一般 → ネットワーク接続 の設定について、ネットワークの管理者に相談してください
JUnit のバーが赤くなる
テストが失敗した JUnit ビューで失敗したテストをクリックすると、下に原因が表示されます。expected: <3> but was: <2> なら「3件のはずが2件だった」という意味です。データの件数(第9章で削除した、COMMIT していない など)を確認します(第7章 7.3)
コンソールが見当たらない
ビューを閉じてしまった ウィンドウ → ビューの表示 → コンソール で開き直します

B.7 よくある打ち間違い・置き間違い

B.2〜B.6 はエラーの表示から原因を探す表でしたが、ここでは逆に、初めて作るときにやりがちな間違いから、どんな症状になるかをまとめました。エラーにならず、ただ動かないだけの間違いもあります。完成版(付録A)と見比べるときのチェックリストとして使ってください。

アノテーションの付け忘れ

間違いの例
起きること 見つけ方・直し方
Controller のクラスに @Controller がない
起動はするが、そのクラスの URL がすべて 404(B.3) クラス宣言の上の行を見ます。@Controller がないと、Spring はそのクラスを Controller として扱いません
メソッドに @GetMapping・@PostMapping がない
その URL だけ 404 メソッド宣言の上の行を見ます

ファイルの置き場所

間違いの例
起きること 見つけ方・直し方
Controller を com.example.employeeapp の外のパッケージ(com.example.other など)に作った
404。エラーは出ない パッケージ・エクスプローラーで、com.example.employeeapp の下にあるか見ます。Spring は、起動クラスがあるパッケージとその下しか探しません(第5章 5.2)
HTML を templates の外(static や src/main/java など)に作った
Error resolving template(B.3) テンプレートは必ず src/main/resources/templates の下に置きます。employee フォルダーの中かどうかも見ます
list.html という名前の フォルダー を作り、その中に list.html を作った
エラーにならず、画面に「list.html」という文字だけが表示される パッケージ・エクスプローラーで、アイコンがファイルかフォルダーかを見ます。新規作成のメニューで「フォルダー」と「ファイル」を取り違えると起きます

名前の中の空白と、つづり

間違いの例
起きること 見つけ方・直し方
ファイル名に空白が入っている(list .html、 list.html)
Error resolving template 空白は目で見つけにくいので、ファイルを右クリック → 名前変更で、名前をすべて消して入力し直します
@GetMapping("/employees ") のように、URL の引用符の中に空白が入っている
404 引用符の中を見ます。見つけにくいので、その行を消して打ち直します
URL とテンプレート名を取り違える:URL は /employees だが、戻り値を "employees/list" と書いた
Error resolving template [employees/list] この教材では、URL は employees(複数形)、テンプレートのフォルダーは employee(単数形)です。return の値はフォルダー名に合わせます
return "redirect"; のように、redirect: の後ろの URL がない
Error resolving template [redirect] redirect: の後ろに、/ から始まる URL を書きます(return "redirect:/employees";)
return "redirect:employees"; のように、URL の先頭の / がない
404。アドレスバーが /employees/3/employees のような、おかしな URL になる / がないと「今の URL からの相対」と解釈されます。redirect:/employees のように / から書きます

import の間違い

間違いの例
起きること 見つけ方・直し方
別のパッケージにある Employee や RegisterForm を import していない
Eclipse でクラス名に赤い下線「Employee を型に解決できません」。起動できない B.6 の手順で import を追加します
候補を選び間違えて、Model を ch.qos.logback.core.model から import した
クラス名の赤い下線は消えるが、model.addAttribute に赤い下線「メソッド addAttribute(...) は型 Model で未定義です」が出る。起動できない ファイルの先頭の import 文を見ます。この教材で使うのは org.springframework.ui.Model です。候補が複数出たときは、パッケージ名が org.springframework で始まるものを選びます

Thymeleaf の書き損じ

間違いの例
起きること 見つけ方・直し方
th;href=、th:actio=、th:href"@{...}"(= がない)
エラーにならず、ただの属性として無視される。リンクを押しても移動しない、フォームが別の URL に送られる、など Chrome の「ページのソースを表示」で、th: や th; がそのまま残っていれば、Thymeleaf に処理されていない証拠です。その属性のつづりと = を見直します
th: href=(th: の後ろに空白)
An error happened during template parsing、Attribute name cannot be null or empty(B.3) 行番号が出ないので、そのテンプレートの th: をすべて見直します
@{/employees/register のように } が抜けている
An error happened during template parsing、Could not parse as expression(B.3) コンソールに出るテンプレート名と行・列の位置を見ます

B.8 それでも解決しないとき

このページに載っていないエラーや、対処しても直らないエラーに出会うこともあります。そのときは、次の順で進めましょう。

  1. エラーメッセージの全文をコピーする
    コンソールを右クリック →「すべて選択」→「コピー」で、メモ帳などに貼り付けて保存します。一部だけでなく全文を残すのがポイントです。
  2. 何をしたら起きたかをメモする
    「どのファイルを変更したか」「どのボタンを押したか」「その前は動いていたか」を書き出します。直前に変更した箇所が原因であることがほとんどです。
  3. 完成版と見比べる
    この教材の完成版ソースコード(付録A)と、自分のコードを1行ずつ見比べます。つづりの違い、大文字・小文字、かっこやセミコロンの抜けがよくある原因です。
  4. エラーメッセージで検索する
    ORA- の番号や、英語のエラー文の特徴的な部分で検索すると、同じエラーに出会った人の情報が見つかることがあります。
  5. 周りの人に聞く
    1〜4 をやっても分からなければ、周りの人に相談しましょう。そのとき、次のことを伝えると、相手も原因を見つけやすくなります。

【便利な使い方】質問するときに伝えること

  • 何をしようとしていたか(例:第11章の「登録」ボタンを押した)
  • 何が起きたか(エラーメッセージの全文、画面の様子)
  • 自分で何を試したか(例:URL のつづりは確認した、再起動した)

【便利な使い方】エラーは成長のチャンス

エラーを自分で読んで直した経験は、そのまま実力になります。現場でも、エラーメッセージを落ち着いて読み、原因を絞り込んでいく力はとても大切です。すぐに答えを探す前に、まずメッセージを読んでみましょう。


前へ

付録A 完成版ソースコード

次へ

付録C Eclipse 操作早見表・用語集

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?