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

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

関連記事

InputStreamやInputStreamReaderやBufferedReaderの機能や役割の違い+速度測定で比較をした結果共有

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) InputStreamやBufferedReaderとは?  (2-1) 概要  (2-2) InputStr …

JavaScriptのオブジェクト(object)の書き方やメソッドを追加する方法

  <目次> (1) JavaScriptのオブジェクト(object)の書き方やメソッドを追加する方法  (1-1) 構文①:オブジェクト作成  (1-2) 構文②:オブジェクトにアクセス …

Javaのprintfで右揃え(右詰め)や左揃え(左詰め)にフォーマットする方法

<目次> (1) Javaのprintfで右揃えや左揃えにフォーマットする方法  (1-1) 構文  (1-2) 右揃えの方法  (1-3) 左揃えの方法  (1-4) 主要な変換文字(s,d,f,t …

「サーブレットコンテナ」や「サーブレットのライフサイクル」とは?(サンプルプログラム付)

※本記事は「サーブレットとは?その役割やHelloWorldサンプルコードのご紹介」の続編です。 (0)目次&概説 (2) サーブレットコンテナの基本  (2-1) サーブレットコンテナとは?  (2 …

Javaのラッパークラスとは?使い方や一覧をご紹介

<目次> (1) Javaのラッパークラスとは?使い方や一覧をご紹介  (1-1) ラッパークラスとは?  (1-2) 構文(オブジェクト生成)  (1-3) 代表的なメソッド(Integerを例に) …

  • English (United States)
  • 日本語
Top