Skip to content

Spring Bootプロジェクトにデータクラスを追加する

これはSpring BootとKotlin入門チュートリアルの2番目のパートです。続行する前に、以前のステップを完了していることを確認してください。


最初のステップ KotlinでSpring Bootプロジェクトを作成する
2番目のステップ Spring Bootプロジェクトにデータクラスを追加する
3番目のステップ Spring Bootプロジェクトにデータベースサポートを追加する
4番目のステップ Spring Data CrudRepositoryを使用してデータベースにアクセスする

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

アプリケーションを更新する

  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`キーワードでマークされ、クラス構造から、いくつかの標準機能やユーティリティ関数が機械的に導出されることがよくあります。

    この例では、`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
    Message(null, "Hello!")
  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
    Message("3", "Privet!"),

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

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

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

NOTE

Springアプリケーション内の任意のコントローラーは、Jacksonライブラリがクラスパスにある場合、デフォルトでJSONレスポンスをレンダリングします。

build.gradle.ktsファイルでspring-boot-starter-web依存関係を指定したため、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リクエストを行います。

次の章に進む