Spring Bootプロジェクトにデータクラスを追加する
これは「Spring BootとKotlinを始める」チュートリアルの第2部です。続行する前に、以前のステップが完了していることを確認してください:
KotlinでSpring Bootプロジェクトを作成する
Spring Bootプロジェクトにデータクラスを追加する
Spring Bootプロジェクトにデータベースサポートを追加する
データベースアクセスにSpring Data CrudRepositoryを使用する
このチュートリアルのこのパートでは、アプリケーションに機能を追加し、データクラスなどのKotlin言語のさらなる機能について学びます。 これには、MessageController
クラスを変更して、シリアライズされたオブジェクトのコレクションを含むJSONドキュメントで応答させる必要があります。
アプリケーションを更新する
同じパッケージ内の
DemoApplication.kt
ファイルの隣に、Message.kt
ファイルを作成します。Message.kt
ファイルに、id
とtext
という2つのプロパティを持つデータクラスを作成します:kotlin// Message.kt package com.example.demo data class Message(val id: String?, val text: String)
Message
クラスはデータ転送に使用されます。シリアライズされたMessage
オブジェクトのリストが、コントローラーがブラウザのリクエストに応答するJSONドキュメントを構成します。データクラス – データクラス Message
Kotlinのデータクラスの主な目的はデータを保持することです。このようなクラスは
data
キーワードでマークされ、いくつかの標準的な機能やユーティリティ関数は、クラス構造から機械的に導出されることがよくあります。この例では、
Message
クラスの主な目的がデータを保存することであるため、データクラスとして宣言しました。valとvarプロパティ
Kotlinクラスのプロパティは、以下のいずれかの方法で宣言できます:
- 可変(
var
キーワードを使用) - 読み取り専用(
val
キーワードを使用)
Message
クラスは、val
キーワードを使用して、id
とtext
の2つのプロパティを宣言しています。 コンパイラはこれら両方のプロパティに対してゲッターを自動的に生成します。Message
クラスのインスタンスが作成された後、これらのプロパティの値を再代入することはできません。Null許容型 – String?
Kotlinはnull許容型の組み込みサポートを提供します。Kotlinでは、型システムが
null
を保持できる参照(null許容参照)と、保持できない参照(非null許容参照)を区別します。
例えば、通常のString
型の変数はnull
を保持できません。nullを許可するには、String?
と記述して変数をnull許容文字列として宣言できます。Message
クラスのid
プロパティは、今回はnull許容型として宣言されています。 したがって、id
の値としてnull
を渡してMessage
クラスのインスタンスを作成することが可能です:kotlin- 可変(
MessageController.kt
ファイルで、index()
関数の代わりに、Message
オブジェクトのリストを返すlistMessages()
関数を作成します:kotlin// MessageController.kt package com.example.demo import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/") class MessageController { @GetMapping fun listMessages() = listOf( Message("1", "Hello!"), Message("2", "Bonjour!"), Message("3", "Privet!"), ) }
コレクション – listOf()
Kotlin標準ライブラリは、基本的なコレクション型(セット、リスト、マップ)の実装を提供します。
各コレクション型は、読み取り専用または可変のいずれかです:- 読み取り専用コレクションは、コレクション要素にアクセスするための操作を備えています。
- 可変コレクションは、要素の追加、削除、更新のための書き込み操作も備えています。
対応するファクトリ関数も、Kotlin標準ライブラリによって提供され、そのようなコレクションのインスタンスを作成します。
このチュートリアルでは、
listOf()
関数を使用して、Message
オブジェクトのリストを作成します。 これはオブジェクトの読み取り専用リストを作成するためのファクトリ関数です。リストから要素を追加したり削除したりすることはできません。
リストに対する書き込み操作を実行する必要がある場合は、mutableListOf()
関数を呼び出して可変リストインスタンスを作成します。末尾のカンマ
末尾のカンマは、一連の要素の最後の項目の後ろに付くカンマ記号です:
kotlinこれはKotlinの構文の便利な機能であり、完全にオプションです。これらがなくてもコードは動作します。
上記の例では、
Message
オブジェクトのリストを作成する際に、最後のlistOf()
関数の引数の後に末尾のカンマが含まれています。
MessageController
からの応答は、Message
オブジェクトのコレクションを含むJSONドキュメントになります。
Springアプリケーション内の任意のコントローラーは、Jacksonライブラリがクラスパスにあれば、デフォルトでJSON応答をレンダリングします。
build.gradle.kts
ファイルでspring-boot-starter-web
の依存関係を指定したため、Jacksonは_推移的_依存関係として含まれています。 したがって、エンドポイントがJSONにシリアライズ可能なデータ構造を返した場合、アプリケーションはJSONドキュメントで応答します。
DemoApplication.kt
、MessageController.kt
、Message.kt
ファイルの完全なコードを以下に示します:
// DemoApplication.kt
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
// MessageController.kt
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/")
class MessageController {
@GetMapping
fun listMessages() = listOf(
Message("1", "Hello!"),
Message("2", "Bonjour!"),
Message("3", "Privet!"),
)
}
// Message.kt
package com.example.demo
data class Message(val id: String?, val text: String)
アプリケーションを実行する
Springアプリケーションを実行する準備ができました:
アプリケーションを再度実行します。
アプリケーションが起動したら、次のURLを開きます:
texthttp://localhost:8080
JSON形式のメッセージコレクションを含むページが表示されます:
次のステップ
チュートリアルの次のパートでは、プロジェクトにデータベースを追加して構成し、HTTPリクエストを行います。