EclipseでSpringBoot 動かしてみた

# 参考

Springの公式ページの「Spring Quickstart Guide」を参考にやってみた。
https://spring.io/quickstart

# 注意

**動くのか確認するためだけのプログラムなので
Mainのクラスにルーティング処理とかController設定とかしちゃってるけど
実際にはこんな書き方はしません。**

**しっかりレイヤー構成を考慮して作りましょう。**

# 環境

* [Eclipse 2020 Windows 64bit](https://mergedoc.osdn.jp/)
* [Spring Boot](https://spring.io/)

# Springのプロジェクトを作成

公式の[プロジェクト生成ページ](https://start.spring.io/)で好みに合わせてジェネレート。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/78129bcb-ccbf-bca7-8ede-dd69fe541bcc.png)


* Gradle
  * Mavenのpomファイルは性に合わないのでビルドシステムはGradleを選択
* Java 8
  * Kotlinも気になるけどJava
  * Versionはデフォルト設定
* Spring Boot 2.2.6
  * これは適当
* Packaging Jar
  * Webであることを考えるとWarだけど試しにJarを選択

GENERATEボタンを押すとプロジェクトがzipでダウンロードされる。

# Eclipseでプロジェクトをインポート

## Gradleプロジェクトをインポート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/6bd9988f-4287-0d18-c026-12d5a1690b87.png)

## ダウンロードしたフォルダを指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/9c65f122-d39b-27a1-0592-1b7a84c3e432.png)

## インポートされた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/062ecdd3-b347-0cfe-7fe5-2730b7cebb80.png)

必要なライブラリとかダウンロードされてビルドも勝手に行われて問題なければこんなん出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/35af53d9-54c2-1e2c-85c1-829fb99946b8.png)

# 実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/fcd93e49-9f50-f5a7-4015-ba2de305851f.png)

Spring Bootが起動したらこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/3aae1b40-6930-f817-9890-2514784553fd.png)

http://localhost:8080/ にアクセス。
まだルーティング処理書いてないので「Whitelabel Error Page」というエラーが出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/c65068f3-c362-5f20-f4c6-67d21f20c40a.png)


# ルーティング処理を作成

プロジェクトに入っているメインのクラスにルーティング処理を追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/7f83efae-c248-0af8-5b78-4ec8988977ea.png)

## GETリクエストでリクエストパラメータを取得

```java
package com.pakhuncho.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloApplication {

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

	@GetMapping("/hello")
	public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
		return String.format("Hello %s!", name);
	}
}
```

変更したアプリケーションを再配置する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/cef679d0-6996-7e98-85fd-5dd3bcd3431b.png)

http://localhost:8080/hello でアクセスする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/f560c12f-750e-ea26-26ab-79930cb898d0.png)

http://localhost:8080/hello?name=pakhuncho でアクセスする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/bcdcfa35-fae8-bb76-ad2a-db68eba6f530.png)

http://localhost:8080/hello?name=ぱくぱく でアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/e00501b3-056e-82fe-8a23-ba1046022ecf.png)

## パス・パラメータを取得

```java
package com.pakhuncho.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloApplication {

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

	@RequestMapping("/hello/{name}")
	public String hello(@PathVariable String name) {
		return String.format("Hello %s!", name);
	}
}
```
http://localhost:8080/hello/ぱくぱく でアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224453/f3d9a8af-a74d-bec0-43ad-b72c57afbb31.png)