この教材を進める中で出会いやすいエラーを、場面ごとにまとめました。エラーが出たら、まず表示されたメッセージの中の特徴的な言葉(ORA- の番号や英語のキーワード)を、このページで探してみましょう。
B.1 エラーを読むコツ
エラーメッセージは長くて英語ばかりなので、最初は読む気がしないかもしれません。しかし、見るべき場所はだいたい決まっています。
コンソールのエラーは「一番下の Caused by:」を見る
Eclipse のコンソールに赤い文字で長いメッセージが出たら、上から全部読む必要はありません。次の順で探しましょう。
- ERROR と書かれた行を探し、その行の最後の文章を読みます。何が失敗したかの概要が書かれています。
- メッセージを下へスクロールし、一番下にある
Caused by:の行を読みます。これが 本当の原因 であることが多いです。 -
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/employeeWhitelabel 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-28001 パスワードの有効期限が切れています | |
| 原因 | empapp のパスワードの期限が切れた(既定では 180 日) |
| 対処 |
「開発環境の準備」の「パスワードの期限が切れたとき」の手順で、XE_SYSTEM のワークシートで ALTER USER empapp IDENTIFIED BY empapp ACCOUNT UNLOCK; を実行して、パスワードを設定し直します。そのあと、第3章 3.3「パスワードを無期限にする」の SQL を XE_SYSTEM で実行し、アプリを起動し直します |
ORA-12514 リスナーは接続記述子でリクエストされたサービスを現在認識していません | |
| 原因 | サービス名が違う |
| 対処 |
spring.datasource.url の最後が /XEPDB1(mac では FREEPDB1) になっているか確認します(:XE や /XE ではありません) |
ORA-12541 リスナーがありません / IO エラー 接続が拒否されました | |
| 原因 | Oracle Database が起動していない |
| 対処 | Windows のスタートメニューで「サービス」と検索して開き、OracleServiceXE と OracleOraDB21Home1TNSListener の状態が「実行中」か確認します。止まっていたら、右クリック →「開始」を選びます(「開発環境の準備」5) |
【知識メモ】MyBatis コースの場合
MyBatis コースのアプリは、起動したときにはまだデータベースに接続しません(第4章 4.3)。そのため、上の表のエラーは起動のときには出ず、起動は成功します。初めて SQL を実行したとき(第8章で社員一覧を表示したときなど)に、画面が 500 エラー(Whitelabel エラー画面)になり、コンソールに次のようなメッセージと、その原因の ORA-01017 などが表示されます。原因と対処は、上の表と同じです。
org.mybatis.spring.MyBatisSystemException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection
java.sql.SQLException: ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
ポートが使われている
| エラー表示 | |
|---|---|
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 番を使っている可能性があります。どのプログラムがポート 8080 を使っているかは、Windows の コマンド プロンプト で調べられます。
-
Windows キーを押しながら R キーを押します。「ファイル名を指定して実行」の画面が開くので、
cmdと入力して Enter キーを押します。黒い画面(コマンド プロンプト)が開きます。 -
次のコマンドを入力して、Enter キーを押します。
コマンド プロンプトnetstat -ano | findstr ":8080 " -
次のような行が表示されます。行の右端の数字が、そのポートを使っているプログラムの番号(PID)です。
表示の例TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 12345何も表示されなければ、ポート 8080 は使われていません。
-
タスク マネージャー(Ctrl キーと Shift キーを押しながら Esc キー)を開き、「詳細」タブの「PID」の列で、その番号のプログラムの名前を確かめます。
心当たりのあるソフトを終了するか、パソコンの管理者に相談してください。Oracle の 1521 番も、コマンドの :8080 を :1521 に変えれば、同じ方法で確認できます。
【ご注意】mac で取り組んでいる場合
mac では、上の表のタスク マネージャーと、上の囲みのコマンド プロンプトは使えません。次のように読み替えます。
前に起動したアプリの Java が残っているとき(上の表の2つ目)
- Eclipse を終了します。
- ⌘ + Space で Spotlight を開き、アクティビティモニタ と入力して Return を押します。「アクティビティモニタ」は、Windows のタスク マネージャーにあたるアプリです。
- 右上の検索欄に
javaと入力します。表示されたjavaを選び、上の「停止」ボタン(丸の中に × のマーク)を押して、「終了」を押します。 - Eclipse を起動し直します。
Eclipse 以外のソフトが 8080 番を使っているかを調べるとき(上の囲み)
-
ターミナルを開きます(「開発環境の準備(macOS版)」の「ターミナルを開く」)。
-
次のコマンドを入力して、Return を押します。
ターミナルlsof -nP -iTCP:8080 -sTCP:LISTEN -
次のような行が表示されます。左端の「COMMAND」がそのポートを使っているプログラムの名前で、その右の数字が番号(PID)です。
表示の例COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12345 <ユーザー名> 80u IPv6 0x1234567890abcdef 0t0 TCP *:8080 (LISTEN)何も表示されなければ、ポート 8080 は使われていません。何も表示されないのに同じエラーが出るときは、mac を再起動してください。
-
アクティビティモニタの検索欄に、COMMAND の名前を入力して、そのプログラムを確かめます。
心当たりのあるソフトを終了してください。Oracle の 1521 番も、コマンドの 8080 を 1521 に変えれば、同じ方法で確認できます。mac では、1521 番は OrbStack(Oracle のコンテナ)が使っているのが正常です。
部品(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 ...(JPA コース) | |
| 原因 | Entity として認識されていない |
| 対処 | Entity クラスに @Entity が付いているか、entity パッケージが com.example.employeeapp の下にあるかを確認します(第6章 6.4) |
No property 'xxx' found for type 'Employee'(JPA コース) | |
| 原因 | 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(JPA コース) | |
| 原因 |
@JoinColumn の referencedColumnName の値が、Department のフィールド名と合っていない |
| 対処 | Employee の @JoinColumn(name = "DEPT_ID", referencedColumnName = "deptId") の deptId が、Department クラスのフィールド名と同じつづりかを確認します(第6章 6.3) |
【知識メモ】MyBatis コースの場合
上の表のうち「(JPA コース)」と書いたものは、JPA コースだけで出るエラーです。MyBatis コースでは、起動のときに次のエラーが出ることがあります。Mapper の書き間違いによるエラーの一覧は、第7章 MyBatis 入門② 7.5にもまとめています。
| エラー表示 | 原因 | 対処 |
|---|---|---|
No qualifying bean of type 'com.example.employeeapp.mapper.EmployeeMapper' |
Mapper の実装が作られていない | インターフェースに @Mapper が付いているかを確認します(第7章 MyBatis 入門② 7.1) |
Error parsing Mapper XML |
Mapper の XML の書き方が間違っている | メッセージの続きに書かれたファイル名と行を見て、タグの閉じ忘れ(</select> など)や、" の付け忘れを確認します(第7章 MyBatis 入門② 7.2) |
気にしなくてよいメッセージ
【知識メモ】WARN HHH100123: Low default JDBC fetch size
起動時に黄色っぽい「WARN」でこのメッセージが出ることがありますが、データベースとの通信の調整に関する助言で、アプリの動作には影響しません。「WARN」は警告、「ERROR」は失敗です。ERROR が出ていなければ、起動は成功 しています(第4章 4.4)。
MyBatis コースでは、Mapper を作る前(第4〜6章)に、起動時に WARN ... No MyBatis mapper was found in '[com.example.employeeapp]' package. Please check your configuration. が出ます。Mapper がまだ1つもない、という知らせで、第7章で Mapper を作ると出なくなります(第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 + Shift + R(キャッシュを使わずに再読み込み)も試します |
B.4 データベースのエラー
| エラー表示 | |
|---|---|
ORA-65096 共通ユーザーまたはロール名が無効です | |
| 原因 | ユーザーを作るときに、アプリ用のデータベース(XEPDB1)ではなく、コンテナ・データベース(XE)に接続している |
| 対処 | SQL Developer の接続のプロパティで、「SID」の xe ではなく 「サービス名」の XEPDB1(mac では FREEPDB1) を指定して接続し直します(第3章 3.3)。SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL; で XEPDB1(mac では FREEPDB1) と表示されれば正しい接続です |
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 を自分で指定していないか確認します |
【知識メモ】MyBatis コースの場合
MyBatis コースでは、SQL を Mapper の XML に自分で書くので、上の表の ORA- のエラーは、多くの場合 XML の SQL の書き間違いが原因です。「Entity の〜」と書いた対処は、次のように読み替えます。
| エラー表示 | 原因 | 対処 |
|---|---|---|
ORA-00942 表またはビューが存在しません |
SQL のテーブル名が間違っている | XML の SQL のテーブル名(EMPLOYEE・DEPARTMENT)のつづりを確認します |
ORA-00904 無効な識別子です |
SQL の列名が間違っている | メッセージの "…" に書かれた列名のつづりを、XML の SQL で確認します |
ORA-02289 順序が存在しません |
シーケンスが見つからない |
EmployeeMapper.xml の <selectKey> の SEQ_EMP.NEXTVAL のつづりを確認します(第7章 MyBatis 入門② 7.3) |
ORA-00933 SQLコマンドが正しく終了されていません |
SQL の最後に ; が付いている |
XML の SQL から ; を消します |
MyBatis コースでは、画面を表示したときやボタンを押したときに、次のエラーが出ることもあります。
| エラー表示 | 原因 | 対処 |
|---|---|---|
Invalid bound statement (not found): com.example.employeeapp.mapper.EmployeeMapper.findByEmpId |
メソッドに対応する SQL が見つからない | XML の namespace がインターフェースの名前と、id がメソッドの名前と合っているかを確認します。XML ファイルが src/main/resources/mapper にあるかも確認します(第7章 MyBatis 入門② 7.3) |
There is no getter for property named 'xxx' in 'class com.example.employeeapp.entity.Employee' |
#{…} の中の名前が、データのクラスのフィールド名と違う |
XML の #{…} の中のつづり(empId・birthDate・department.deptId など)を確認します |
NullPointerException(部署名を取り出すところ) |
社員の department が null のまま |
社員の <select> に resultMap="employeeWithDepartment" が書いてあるか(resultType になっていないか)、<association> の property が department になっているかを確認します(第7章 MyBatis 入門② 7.3) |
エラーは出ないが、おかしいとき
| 症状 | |
|---|---|
| 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}" の項目名が、フォームのフィールド名と一致しているか確認します |
| 入力したのに「住所(都道府県)を入力してください。」のようなエラーが出る | |
| 原因 | 入力した値が、Spring のフォームに届いていない。テンプレートの入力欄に th:field がなく値が送られていないか、フォームクラスの setter の引数名が違って送られた値を受け取れていない |
| 対処 | どちらの間違いかは、送られたフォームデータにその項目があるかを、付録D の方法で見て切り分けます。項目がなければテンプレート、あればフォームクラスを直します |
セッション(第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 のトラブル
| 症状 | |
|---|---|
| プロジェクトに赤い × 印が付く | |
| 原因 | ライブラリのダウンロードが途中で止まった、設定が古い など |
| 対処 | 「ライブラリを取り直す」の手順で、ライブラリを取り直します |
作業の途中で、急にたくさんのエラーが出る(import や @ の行がまとめて赤くなる) | |
| 原因 | ダウンロード済みのライブラリのファイルが壊れた |
| 対処 | 「ライブラリを取り直す」の手順で、ライブラリを取り直します |
| コードは正しいはずなのに、エラーが消えない(ライブラリを取り直しても直らない) | |
| 原因 | Eclipse の設定やファイルが壊れている |
| 対処 | 「Eclipse を入れ直す」の手順で、Eclipse を入れ直します |
| クラス名に赤い下線が引かれる(〜に解決できません) | |
| 原因 | import が足りない |
| 対処 | 赤い下線の語の末尾にカーソルを置いて Ctrl + Space を押し、候補から選び直します(import 文が追加されます)。同じ名前のクラスが複数ある場合は、jakarta.persistence・org.springframework などのパッケージ名を見て選びます(第4章) |
| コードを直して保存したのに、動きが変わらない | |
| 原因 | アプリに変更が反映されていない |
| 対処 | コンソールの赤い四角でアプリを停止してから、もう一度起動します。ファイルを保存しただけでは、動いているアプリには反映されません |
| 日本語が文字化けする(画面・メッセージ・ファイル) | |
| 原因 | ファイルの文字コードが UTF-8 でない |
| 対処 | ファイル(またはプロジェクト)を右クリック → プロパティー → リソース で「テキスト・ファイルのエンコード」を「その他:UTF-8」にします |
| Spring スターター・プロジェクトの作成画面でエラーになる・先に進めない | |
| 原因 | インターネットに接続できない(start.spring.io に接続できない) |
| 対処 | インターネットに接続されているか確認します。会社のネットワークでプロキシの設定が必要な場合は、ウィンドウ → 設定 → 一般 → ネットワーク接続 の設定について、ネットワークの管理者に相談してください |
| JUnit のバーが赤くなる | |
| 原因 | テストが失敗した |
| 対処 | JUnit ビューで失敗したテストをクリックすると、下に原因が表示されます。expected: <3> but was: <2> なら「3件のはずが2件だった」という意味です。データの件数(第9章で削除した、COMMIT していない など)を確認します(第7章 7.3) |
| コンソールが見当たらない | |
| 原因 | ビューを閉じてしまった |
| 対処 | ウィンドウ → ビューの表示 → コンソール で開き直します |
ライブラリを取り直す(Maven プロジェクトの更新)
Maven は、ダウンロードしたライブラリを、パソコンの C:\Users\(ユーザー名)\.m2 というフォルダー(ローカル・リポジトリ)に保存しておき、次からはそれを使います。ダウンロードの途中で通信が切れたりしてここのファイルが壊れると、プロジェクトに赤い × 印が付いたり、急にたくさんのエラーが出たりします。そのようなときは、次の手順でライブラリを取り直します。
- プロジェクトを右クリック → Maven → プロジェクトの更新 を選びます。
- 「スナップショット/リリースの更新を強制」にチェックを入れて、「OK」を押します。
チェックを入れずに更新すると、壊れたファイルがそのまま使われ、直らないことがあります(第4章「ライブラリのダウンロードを待つ」)。
B.7 よくある打ち間違い・置き間違い
B.2〜B.6 はエラーの表示から原因を探す表でしたが、ここでは逆に、初めて作るときにやりがちな間違いから、どんな症状になるかをまとめました。エラーにならず、ただ動かないだけの間違いもあります。完成版(付録A)と見比べるときのチェックリストとして使ってください。
アノテーションの付け忘れ
| 間違いの例 | |
|---|---|
Controller のクラスに @Controller がない | |
| 起きること | 起動はするが、そのクラスの URL がすべて 404(B.3) |
| 見つけ方 ・直し方 |
クラス宣言の上の行を見ます。@Controller がないと、Spring はそのクラスを Controller として扱いません。送信は正しいのに 404 になることは、付録D の方法で確かめられます |
メソッドに @GetMapping・@PostMapping がない | |
| 起きること | その URL だけ 404 |
| 見つけ方 ・直し方 |
メソッド宣言の上の行を見ます。送信は正しいのに 404 になることは、付録D の方法で確かめられます |
ファイルの置き場所
| 間違いの例 | |
|---|---|
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 のように / から書きます。実際のリダイレクト先は、付録D の方法で確かめられます |
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 に処理されていない証拠です。その属性のつづりと = を見直します。送信先の URL は、付録D の方法でも確かめられます |
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 それでも解決しないとき
このページに載っていないエラーや、対処しても直らないエラーに出会うこともあります。そのときは、次の順で進めましょう。
-
エラーメッセージの全文をコピーする
コンソールを右クリック →「すべて選択」→「コピー」で、メモ帳などに貼り付けて保存します。一部だけでなく全文を残すのがポイントです。 -
何をしたら起きたかをメモする
「どのファイルを変更したか」「どのボタンを押したか」「その前は動いていたか」を書き出します。直前に変更した箇所が原因であることがほとんどです。 -
完成版と見比べる
この教材の完成版ソースコード(付録A)と、自分のコードを1行ずつ見比べます。つづりの違い、大文字・小文字、かっこやセミコロンの抜けがよくある原因です。 -
ライブラリを取り直す
コードに間違いが見つからないのに、急にたくさんのエラーが出るときは、ライブラリのファイルが壊れていることがあります。B.6 の「ライブラリを取り直す」の手順で、取り直してみます。 -
エラーメッセージで検索する
ORA-の番号や、英語のエラー文の特徴的な部分で検索すると、同じエラーに出会った人の情報が見つかることがあります。 -
周りの人に聞く
1〜5 をやっても分からなければ、周りの人に相談しましょう。そのとき、次のことを伝えると、相手も原因を見つけやすくなります。
【便利な使い方】質問するときに伝えること
- 何をしようとしていたか(例:第11章の「登録」ボタンを押した)
- 何が起きたか(エラーメッセージの全文、画面の様子)
- 自分で何を試したか(例:URL のつづりは確認した、再起動した)
【便利な使い方】エラーは成長のチャンス
エラーを自分で読んで直した経験は、そのまま実力になります。現場でも、エラーメッセージを落ち着いて読み、原因を絞り込んでいく力はとても大切です。すぐに答えを探す前に、まずメッセージを読んでみましょう。
Eclipse を入れ直す
ここまでの手順を試しても、コードは合っているはずなのにエラーが消えず、B.6 の「ライブラリを取り直す」をやっても直らないときは、Eclipse の設定やファイルが壊れていることがあります。そのようなときは、作ったプロジェクトを残したまま、Eclipse(Pleiades)だけを入れ直すと直ることがあります。
【ご注意】workspace フォルダーは削除しない
作ったプロジェクトは、すべて C:\pleiades\2026-09\workspace の中にあります。このフォルダーを削除すると、プロジェクトも消えてしまいます。削除する前に、消してよいのが workspace 以外 のものであることを、もう一度確かめてください。
- Eclipse を終了します。
- 念のため、
C:\pleiades\2026-09\workspaceフォルダーを、デスクトップなど別の場所にコピーしておきます。 -
C:\pleiades\2026-09フォルダーを開き、workspace以外のフォルダーとファイルをすべて削除 します。フォルダー名の2026-09は、ダウンロードした Pleiades の版によって変わります(2026-12 版なら2026-12)。 - ダウンロードした Pleiades を、もう一度
C:\pleiades\2026-09(前と同じ場所)に展開します(「開発環境の準備」4「展開(インストール)」)。 - Eclipse を起動し、ワークスペースは今までと同じ
../workspaceを選びます。プロジェクトがそのまま表示されます。 - B.6 の「ライブラリを取り直す」の手順を、もう一度行います。