Spring Boot の学習【はじめ】

仕事でJavaは少しくらいは触っているけど、流行りのフレームワークには触れる機会がなく過ごしていますが何となくSpring Bootを見ていると、もしかしたら今度こそこれがスタンダードのフレームワークとして定着するんじゃないかなぁ？覚えて損はない。と思い立って、触ってみる事にしました。
#【スターター・プロジェクト】
はじめてのSpring Bootプロジェクト作成ですが、他に選択が無いので定番かもしれませんがここからスタートします。

１．プロジェクト設定１
Gradleというのがどうも筆者は設定が見やすいので、これにします。
パッケージは、jarはまだよくわからないのでwarとします。

![start_1.png](https://qiita-image-store.s3.amazonaws.com/0/353495/dcc3abf0-9205-8b25-6367-269cb2f26139.png)

２．プロジェクト設定２
とりあえずは、動かしてみたいだけなのでテンプレートエンジンとwebだけを選択
たぶん後で追加はできるはず。
![start_2.png](https://qiita-image-store.s3.amazonaws.com/0/353495/efcce161-e699-e933-e31d-2feadab7896a.png)

３．自動生成の中身
下記のように自動生成されました。
![start_3.png](https://qiita-image-store.s3.amazonaws.com/0/353495/df0f7f82-920a-8756-ce17-87e52350a424.png)

４．コントローラーの作成
Controllerは主にWebページ用のコントローラで使用する。
RestControllerはJsonやXML等を返すWebAPI用のコントローラで使用する。
との事ですが、どっちも試してみたいと思います。
まずは、RestControllerから作ります。

```java:TestRest.java
package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestRest {

	@RequestMapping("/Rest")
	public String Rest() {
		return "これはRest";
	}

}
```
![start_4.png](https://qiita-image-store.s3.amazonaws.com/0/353495/a89a48ab-f2b4-1844-3ab9-8019e0ae7136.png)

５．実行してみる
実行で「Spring Bootアプリケーション」を選択する
![start_5.png](https://qiita-image-store.s3.amazonaws.com/0/353495/4b5ac51c-5a32-94a4-989d-3d1f0968a390.png)

６．ブラウザーからアクセスしてみる
どうもTomcatは動いているが、肝心の作成したコントローラが見つからない？
いったいどういうこと？
![start_6.png](https://qiita-image-store.s3.amazonaws.com/0/353495/98d12d71-b4de-bd8a-04c5-824f3e35a2f6.png)

７．RestControllerをSpringBootApplicationが置いてあるパッケージに移動させてみる
![start_7.png](https://qiita-image-store.s3.amazonaws.com/0/353495/5169c6b0-b130-0f06-fe9a-10141aca7a11.png)

８．再度ブラウザーからアクセス
なぜか、動いた！という事は、SpringApplicationが置いてある配下しかコントローラは作れないってこと？
![start_8.png](https://qiita-image-store.s3.amazonaws.com/0/353495/bb33283d-5b53-8ba6-9eb4-5c4ccdbe80ad.png)

９．試しにSpringApplicationの配下にパッケージを作ってみます。

```java:TestRest.java
package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestRest {

	@RequestMapping("/Rest")
	public String Rest() {
		return "これはRest。demo配下のパッケージより";
	}

}
```

やっぱりそうか、そうなのね。
![start_9.png](https://qiita-image-store.s3.amazonaws.com/0/353495/b16d969b-cf5c-171d-cb71-304c78d450fd.png)
まぁともかくちょっと理解が進んだ。
RestControllerはこれくらいでいいだろう。
次に進みます。Controllerを使って、テンプレートエンジンを使ってみます。

#１０．Controllerを作ってみる。
「templates」フォルダにindex.htmlを作成します。

```html:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>初めてのThymeleaf</title>
</head>
<body>
 <h1 th:text="${message}"></h1>
</body>
</html>
```
com.example.demo.controllerに「TestController.java」を作成。

```java:TestController.java
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {

	@RequestMapping("/")
	public String index(Model model) {
		model.addAttribute("message", "Thymeleaf動きました！");
		return "index";
	}

}
```
![start_10.png](https://qiita-image-store.s3.amazonaws.com/0/353495/0cf76faa-3958-7718-8163-4625a1bf4bf8.png)

１１．実行してtemplatesの動作確認
ちゃんと動きました！めでたしめでたし。
文字コードは何も意識しないで文字化けもせず、すんなりとここまで来れるんですね。
Spring Bootなかなかよさそうですね。次はフォームを作って見よう。
![start_11.png](https://qiita-image-store.s3.amazonaws.com/0/353495/48766499-ccfa-2fd8-9d98-c04a3b9834b1.png)