Content Negotiationとkotlinx.serialization
JSONシリアライゼーションを設定し、リクエストボディを自動的にデシリアライズします。
「Content Negotiationとkotlinx.serialization」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
Content Negotiationとは
Content negotiationは、クライアントとサーバーがレスポンスボディの形式について合意するHTTPの仕組みです。クライアントは Accept ヘッダーを送信し、サーバーは最も適合する形式を選択します。Ktorの ContentNegotiation プラグインがこの処理を自動化します。
依存関係の追加
ContentNegotiationプラグインと、kotlinx.serializationのJSONコンバーターを追加します。
dependencies {
implementation("io.ktor:ktor-server-content-negotiation:2.3.12")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1")
}ContentNegotiationのインストール
Applicationモジュールにプラグインをインストールし、JSONコンバーターを登録します。
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.*
fun Application.configureSerialization() {
install(ContentNegotiation) {
json()
}
}@Serializableデータクラス
kotlinx.serializationの @Serializable でデータクラスにアノテーションを付けます。Kotlinコンパイラプラグインがコンパイル時にシリアライザーを生成するため、実行時のリフレクションは必要ありません。
import kotlinx.serialization.Serializable
@Serializable
data class User(val id: Long, val name: String, val email: String)Serializableオブジェクトのレスポンス
ContentNegotiationをインストールすると、任意の @Serializable オブジェクトを call.respond() に渡せます。Ktorが自動的にJSONへシリアライズします。
get("/users/{id}") {
val user = User(1L, "Alice", "alice@example.com")
call.respond(user) // serialized to JSON
}Serializableオブジェクトの受け取り
call.receive を使用すると、リクエストボディを @Serializable クラスへデシリアライズできます。ボディの形式が不正な場合、Ktorは ContentTransformationException をスローします。
post("/users") {
val newUser = call.receive<User>()
call.respond(HttpStatusCode.Created, newUser)
}JSON設定のカスタマイズ
Json インスタンスを json() に渡すと、シリアライズをカスタマイズできます。未知のキーの無視、整形出力、寛容モードなどを設定できます。
install(ContentNegotiation) {
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}複数のコンテンツタイプ
複数の Accept タイプに対応するには、複数のコンバーターを登録します。Ktorはクライアントの Accept ヘッダーに一致する最初のコンバーターを選択します。
install(ContentNegotiation) {
json()
// xml() with ktor-serialization-kotlinx-xml if needed
}リストとマップのシリアライズ
コレクションをレスポンスオブジェクトでラップするか、call.respond(list) を直接使用します。要素の型が @Serializable である限り、kotlinx.serializationは List、Map、ネストしたジェネリクスを処理できます。
get("/users") {
val users = listOf(
User(1, "Alice", "a@example.com"),
User(2, "Bob", "b@example.com")
)
call.respond(users)
}カスタムシリアライザー
自分で所有していない型(例:java.time.Instant)には、KSerializer を実装し、@Serializable(with = MySerializer::class) またはコンテキストシリアライザーモジュールを使用して登録します。
val module = SerializersModule {
contextual(Instant::class, InstantSerializer)
}
install(ContentNegotiation) {
json(Json { serializersModule = module })
}デシリアライズ失敗時のエラー処理
StatusPagesプラグインをインストールすると、call.receiveが失敗したときに、適切なエラーレスポンスを返せます:
install(StatusPages) {
exception<ContentTransformationException> { call, _ ->
call.respond(HttpStatusCode.BadRequest, "Invalid request body")
}
}クイックチェック
kotlinx.serializationでKotlinのデータクラスをシリアライズ可能にするには、どのアノテーションが必要ですか?
振り返り:Content Negotiationとkotlinx.serialization
重要なポイント:
- 自動的にJSONをシリアライズ/デシリアライズするには、
ContentNegotiationとjson()をインストールします - データクラスに
@Serializableを付けます - シリアライズには
call.respond(obj)を、デシリアライズにはcall.receiveを使用します() json()に渡すJson { ... }インスタンスでカスタマイズします- デシリアライズエラーを適切に処理するには
StatusPagesを使用します
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「Content Negotiationとkotlinx.serialization」レッスンは無料ですか?
はい。「Content Negotiationとkotlinx.serialization」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「Content Negotiationとkotlinx.serialization」で何を学びますか?
JSONシリアライゼーションを設定し、リクエストボディを自動的にデシリアライズします。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Content Negotiationとkotlinx.serialization」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Ktorプロジェクトのセットアップ:embeddedServerとApplicationモジュール
- ルーティングと型付きパラメータ
- Content Negotiationとkotlinx.serialization
- 認証プラグイン:JWTとSession