最終的には クライアント側は React で実装、サーバ側は Spring Boot で実装して JSON データをやり取りしようという算段です。 まずは、Spring Boot で JSON を返すエンドポイントをつくるところまでの覚え書き。
開発環境の確認:
$ java -version
openjdk version "17.0.5" 2022-10-18
では、ここ https://start.spring.io/ へアクセスして、 プロジェクトの雛形を取得します。
もう面倒なのでパッケージなどはデフォルト設定のままです。 この設定でダウンロードすると、demo.zip が落ちてくるので、これを展開。
いきなりとりあえず bootRun してみます。
$ cd demo
$ ./gradlew bootRun
特にエラーはないのですが、そのまま終了してしまいます。 ウェブアプリをつくろうとしているので、ウェブサーバが起動してほしかったのですが。 調べてみると、ウェブアプリのために、 denpendencies に追加が必要とのこと。
たぶん、spring initializr で Jar ではなく War を選べという話のような気もする。
build.gradle
dependencies {
//implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
もともとセットされていた implementation 'org.springframework.boot:spring-boot-starter' をコメントアウトして、 implementation 'org.springframework.boot:spring-boot-starter-web' を追記しました。 もう一度 bootRun します。
$ ./gradlew bootRun
今度はコンソールに Tomcat initialized with port(s): 8080 (http) などと表示されてウェブサーバが起動したようです。 ブラウザで http://localhost:8080/ にアクセスすると 何やらエラーページが出ました。 まあ、まだ何もアプリケーションは書いていないのだから当然か、一応これでウェブサーバ起動はできている。 コンソールに戻り、 Ctrl+C でいったん終了して、アプリケーションを記述していきます。
src/main/kotlin/com/example/demo/Item.kt
package com.example.demo
data class Item(val name: String, val type: String)
src/main/kotlin/com/example/demo/ItemController.kt
package com.example.demo
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.*
@RestController
@RequestMapping("items")
class ItemController {
@GetMapping("")
fun index(model: Model): List<Item> {
return listOf(
Item("Pikachu", "Electric"),
Item("Eevee", "Normal"))
}
}
@RestController の指定を忘れずに。
Model は使用する必要ない気がする。(が、試してはない。)
再び bootRun:
$ ./gradlew bootRun
ブラウザで http://localhost:8080/items にアクセスすると以下のように JSON が表示されました。
Item のリストをJSON形式で返すだけのコントローラが完成。