Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

JavaのSpring Bootで404(Not_Found)エラーが出た時の対処方法について

投稿日:2021年12月20日 更新日:

 

<目次>

(1) JavaのSpring Bootで404(Not_Found)エラーが出た時の対処方法について
 (1-1) エラー概要
 (1-2) 原因
 (1-3) 対処法

(1) JavaのSpring Bootで404(Not_Found)エラーが出た時の対処方法について

(1-1) エラー概要

今回はSpring Bootでプロジェクトを作成し、それをEclipseで読み込んで疎通をしようとした際に、pom.xml(Maven(※注1)プロジェクトの設定ファイル)で「Unknown error」が出ました。
 
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Sep 05 23:13:21 JST 2021
There was an unexpected error (type=Not Found, status=404).
 
(図111)①エラーメッセージ
 
(図111)②メインアプリケーションクラス
 
(図111)③新規作成したコントローラークラス
 
(※注1)
MavenはJavaベースのプロジェクトで使用され、ビルドの管理や、依存性&そのバージョン管理等を行います。
 
エラーの再現手順や、環境のバージョン情報は以下の通りです。

(バージョン情報)
・Eclipse 4.7.2
・Java 1.8.0_231

(再現手順)
・①Spring Initializer(https://start.spring.io/)でMavenプロジェクトを作成
・②上記で生成したzipファイルをJDK、Eclipseがインストールされたサーバに配置して解凍
・③EclipseよりMavenプロジェクトをインポート
・④コントローラのクラスを作成&実装(疎通用のHelloWorldメソッドを実装)
・⑤xxxApplication.javaの実行(xxxはご自身が「https://start.spring.io/」で入力したArtifactの値)
 

(1-2) 原因

直接原因はコントローラークラス(HelloWorldController)がスキャン対象に含まれていないためでした。
 
デフォルトでは、部品のスキャン対象はメインのクラスが属するパッケージ(例では「com.rainbowengine.springboothelloworldsample」)配下と、その更に配下のサブパッケージが対象となります。しかし、今回新規に作成したコントローラークラス(HelloWorldController)はメインのクラスが属するパッケージ配下でもなく、そのサブパッケージ配下でも無いためスキャンされていませんでした。
 

(1-3) 対処法

このようなケースでは、未スキャンのパッケージを明示的にスキャンする必要があります。そのため、メインのクラスの「@SpringBootApplication」の下あたりに次の内容を追記します。
 
//#(構文)
@ComponentScan(basePackageClasses = [スキャン対象のクラス名].class)

//#(例)追記後のクラス全体
package com.rainbowengine.springboothelloworldsample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

import com.rainbowengine.controller.HelloWorldController;

@SpringBootApplication
@ComponentScan(basePackageClasses = HelloWorldController.class)
public class SpringBootHelloWorldSampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootHelloWorldSampleApplication.class, args);
	}

}
(図131)

目次にもどる

(1-4) 参考:ComponentScanとは?

Spring Bootのアプリ開発ではアノテーションを使って、必要なクラスを明示的にSpringの処理の中に組み込ませる必要があります(これを部品のスキャン=Scanと呼んでいます)。この機能は毎回の処理で全ての部品を読み込む必要はない、という発想から来ており、処理の効率化に寄与しています。このScanは「@ComponentScan」アノテーションを使って指示する事が出来ます。
(構文)
@ComponentScan(basePackageClasses = [スキャン対象のクラス名].class)
この構文ではクラス指定でスキャンを行います。引数を指定しなかった場合は、パッケージ配下を再帰的に全てスキャンする事も出来ます。

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaのアノテーションとは?種類や使い方についてご紹介

<目次> (1) Javaのアノテーションとは?自作の手順やフィールド値の取得方法もご紹介  (1-1) アノテーションとは?  (1-2) アノテーションの種類  (1-3) 自作アノテーションの作 …

JavaScriptの必須チェックのサンプルプログラム

  <目次> (1) JavaScriptの必須チェックのサンプルプログラム  (1-1) 構文  (1-2) サンプルプログラム (1) JavaScriptの必須チェックのサンプルプログ …

JDBCドライバとは?概要や使い方をご紹介

<目次> (1) JDBCドライバとは?概要や使い方をご紹介  (1-1) JDBC及びJDBCドライバとは?   (1-1) JDBC API   (1-2) JDBCドライバマネージャー   (1 …

Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録

<目次> (1) Javaのフォーム認証でログインを行うと数回で固まってしまう事象の対処記録  (1-1) 発生事象・エラーメッセージ  (1-2) 原因  (1-3) 対策 (1) Javaのフォー …

Twitter APIのRate Limit Exceedエラー(code – 88)を回避するための簡易的な対策について

<目次> (1) Twitter APIのRate Limit Exceedエラー(code – 88)を回避するための簡易的な対策について  (1-1) 対策①:APIの使用回数に閾値を設ける  ( …

  • English (United States)
  • 日本語
Top