【Java・Spring Boot】Spring Bootの環境構築。@SpringBootApplicationのクラスとControllerクラスを分けたい時

2月 25, 2018

どうも、JPAのことを記事にしようとして、SpringBootを使おうと思ったら、
環境構築でハマりました。
解決はしたので、その解決方法を書いていきます。

Controllerクラスを作った時、クラスを認識してくれない

STSを使って環境を自動構築+Controllerクラスを作成したときについて。
Controllerクラスを「〜〜Aplication」とは別のパッケージに入れ起動後、
http://localhost:8080にアクセスしたら以下のエラーになりました。

ぶっちゃけ404エラーですね。

原因

@SpringBootApplicationhaのデフォルト設定では
同パッケージか、子パッケージのコンポーネントしか
起動時に読み込みにいかないようです。
なので、別パッケージに存在するコントローラのコンポーネントを、
読み込みに行ってあげる必要があります。
※2018/02/15現在のバージョンです

Spring Bootの環境について

構築する環境は以下

  • Java 1.8
  • STS 3.9.2
  • Spring Bootバージョン 1.5.10

※WindowsでもMacでも同じ解決方法なので、使用OSは省略

選択した依存関係は以下(Webのみ)

修正前の「〜〜Application」クラスの中身は以下


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestProjectApplication {

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

Controllerクラス作成時にやったこと

Controllerクラスを作成する


自動で作られた「〜〜〜Application」クラスとは別のパッケージにControllerクラスを作る。

Controllerクラスの中身


package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/")
public class UserInfoController {
	
	@RequestMapping(method=RequestMethod.GET)
	public String index() {
		return "main/index";
	}
}

@SpringBootApplicationに「(scanBasePackages={“”})」を追加する

追加した(scanBasePackages={“”})の中に、読み込みたいコントローラなどが存在する
パッケージを指定します。


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages={"com.example.controller"})
public class TestProjectApplication {

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

・複数パッケージを読み込みたい場合


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages={"com.example.controller","com.example.controller2"})
public class TestProjectApplication {

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

これで起動してhttp://localhost:8080/にアクセスすれば
404エラーは解消されるはずです。
※今回の場合は「tenplatesフォルダの中に「main/index.html」ファイルを作っているので
そこを指定してあげています。」

というわけで表示されました。

まとめ

SpringBootって設定ファイルなしで書ける代わりに、アノテーションで色々できちゃうんですね。
あまり深くは触ってこなかったのですが、これからインフラ周りも勉強しないといけないと思うので
勉強していきます!

それでは!!

スポンサーリンク