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(JSP&サーブレット)における画面遷移の手法とそのサンプルコードの紹介

(0)目次&概説 (1) 画面遷移の代表手法  (1-1) フォワード  (1-2) リダイレクト (2) 画面遷移手法のご紹介  (2-1) 方法1:formタグ+Submitボタン(JSP/Ser …

Javaのアーキテクチャ概要やプログラムのコンパイルから実行までの流れ

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) Javaのアーキテクチャ概要・概観  (2-1) プログラムのコンパイル~実行の流れ  (2-2) Javaアーキテクチャの特徴    …

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

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

JSP/Servletでcsvをダウンロードする機能を作成する手順

<目次> (1) JSP/Servletでcsvをダウンロードする機能を作成する手順  (1-0) 実現方針  (1-1) STEP1:Servletの追記  (1-2) STEP2:JSPの追記   …

getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し

<目次> (1) getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し  (1-1) 前半:request.getParameterについて   ●概要 …

  • English (United States)
  • 日本語
Top