Skip to content

Spring Bootプロジェクトへのデータクラスの追加

これは Spring BootとKotlinを使い始める チュートリアルの第2部です。先に進む前に、前のステップを完了していることを確認してください。


First step KotlinでSpring Bootプロジェクトを作成する
Second step Spring Bootプロジェクトにデータクラスを追加する
Third step Spring Bootプロジェクトにデータベースのサポートを追加する
Fourth step データベースアクセスにSpring Data CrudRepositoryを使用する

このチュートリアルでは、アプリケーションに機能を追加し、データクラスなどのKotlin言語のさらなる機能について学びます。 これには、シリアル化されたオブジェクトのコレクションを含むJSONドキュメントを応答するように MessageController クラスを変更する必要があります。

アプリケーションの更新

  1. 同じパッケージ内の DemoApplication.kt ファイルの隣に、 Message.kt ファイルを作成します。

  2. Message.kt ファイルに、 idtext の2つのプロパティを持つデータクラスを作成します。

    kotlin
    // Message.kt
    package com.example.demo
    
    data class Message(val id: String?, val text: String)

    Message クラスはデータ転送に使用されます。シリアル化された Message オブジェクトのリストは、コントローラーがブラウザのリクエストに対して応答するJSONドキュメントを構成します。

    データクラス – data class Message

    Kotlinにおけるデータクラス (data class) の主な目的は、データを保持することです。このようなクラスには data キーワードが付与され、標準的な機能やいくつかのユーティリティ関数がクラスの構造から自動的に導き出されます。

    この例では、データを保存することが主な目的であるため、 Message をデータクラスとして宣言しました。

    valプロパティとvarプロパティ

    Kotlinのプロパティは、以下のいずれかとして宣言できます:

    • ミュータブル (変更可能)var キーワードを使用
    • 読み取り専用val キーワードを使用

    Message クラスは、 val キーワードを使用して idtext の2つのプロパティを宣言しています。 コンパイラは、これら両方のプロパティに対して自動的にゲッター (getter) を生成します。 Message クラスのインスタンスが作成された後、これらのプロパティの値を再代入することはできません。

    Null許容型 – String?

    KotlinはNull許容型 (nullable types) をビルトインでサポートしています。Kotlinの型システムは、 null を保持できる参照 (Null許容参照) と、保持できない参照 (Null非許容参照) を区別します。
    例えば、 String 型の通常の変数は null を保持できません。nullを許可するには、 String? と書くことで、その変数をNull許容文字列として宣言できます。

    今回の Message クラスの id プロパティはNull許容型として宣言されています。 したがって、 id の値として null を渡して Message クラスのインスタンスを作成することが可能です。

    kotlin
  3. 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() 関数を呼び出してミュータブルなリストのインスタンスを作成します。

    末尾のコンマ (Trailing comma)

    末尾のコンマは、一連の要素の最後の項目の後にあるコンマ記号です:

    kotlin

    これはKotlin構文の便利な機能であり、完全にオプションです。これらがなくてもコードは動作します。

    上記の例では、 Message オブジェクトのリストを作成する際、最後の listOf() 関数の引数の後に末尾のコンマを含めています。

MessageController からの応答は、 Message オブジェクトのコレクションを含むJSONドキュメントになります。

Jacksonライブラリがクラスパスにある場合、SpringアプリケーションのコントローラーはデフォルトでJSONレスポンスをレンダリングします。 build.gradle.kts ファイルで spring-boot-starter-webmvc 依存関係を指定したため、推移的 (transitive) 依存関係としてJacksonが含まれています。 そのため、エンドポイントがJSONにシリアル化可能なデータ構造を返す場合、アプリケーションはJSONドキュメントを応答します。

以下は、 DemoApplication.ktMessageController.kt 、および Message.kt ファイルの完全なコードです。

kotlin
// 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)
}
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!"),
    )
}
kotlin
// Message.kt
package com.example.demo

data class Message(val id: String?, val text: String)

アプリケーションの実行

Springアプリケーションを実行する準備が整いました。

  1. アプリケーションを再度実行します。

  2. アプリケーションが起動したら、次のURLを開きます:

    text
    http://localhost:8080

    JSON形式のメッセージのコレクションが表示されたページが表示されます。

    アプリケーションの実行

次のステップ

チュートリアルの次のパートでは、プロジェクトにデータベースを追加して設定し、HTTPリクエストを実行します。

次の章に進む