【Java・Spring Boot】Spring Bootの環境構築。@SpringBootApplicationのクラスとControllerクラスを分けたい時
どうも、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って設定ファイルなしで書ける代わりに、アノテーションで色々できちゃうんですね。
あまり深くは触ってこなかったのですが、これからインフラ周りも勉強しないといけないと思うので
勉強していきます!
それでは!!
ディスカッション
コメント一覧
まだ、コメントがありません