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

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

関連記事

Tomcatのコネクションプールの設定手順

<目次> (1) Tomcatのコネクションプールの設定手順  (1-1) コネクションプールとは?  (1-2) コネクションプールの設定手順   (1-2-1) context.xmlの記述    …

JVMの基本アーキテクチャと各サブシステム等の概要説明について

(0)目次&概説 (1) 記事の目的 (2) Javaのアーキテクチャ概要・概観 (3) JVMのアーキテクチャ概要  (3-1) JVMの概観  (3-2) JVMの主要サブシステム1:Class …

WindowsのcmdからJavaファイルを作成・コンパイル・実行する方法

“Windows”の「コマンドプロンプト」からJavaファイルを作成・コンパイル・実行する方法について記述します。今回の操作は全てコマンドラインインターフェイスから実施いたしま …

Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(UnsupportedClassVersionError)が出る原因と対処方法について

  <目次> (1) Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(Unsupp …

JSP/Servletでログイン・ログアウト機能を作成する方法

<目次> (1) JSP/Servletでログイン・ログアウト機能を作成する方法  (1-1) ログイン   (1-1-1) 概要・構文   (1-1-2) サンプルプログラム  (1-2) ログアウ …

  • English (United States)
  • 日本語
Top