Kotlin Academy · Pelajaran

Negosiasi Konten dan kotlinx.serialization

Konfigurasikan serialisasi JSON dan deserialisasikan isi permintaan secara otomatis.

Pelajaran 3 dari 413 langkah

Negosiasi Konten dan kotlinx.serialization adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa Itu Negosiasi Konten?

Negosiasi konten adalah mekanisme HTTP yang digunakan klien dan server untuk menyepakati format isi respons. Klien mengirim header Accept; server memilih format yang paling cocok. Pengaya ContentNegotiation milik Ktor mengotomatiskan proses ini.

Menambahkan Dependensi

Tambahkan pengaya ContentNegotiation dan konverter JSON kotlinx.serialization:

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")
}

Memasang ContentNegotiation

Pasang pengaya tersebut dalam modul Application dan daftarkan konverter JSON:

import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.*

fun Application.configureSerialization() {
    install(ContentNegotiation) {
        json()
    }
}

@Serializable Kelas Data

Anotasikan kelas data Anda dengan @Serializable dari kotlinx.serialization. Pengaya kompiler Kotlin menghasilkan serializer pada waktu kompilasi — tidak diperlukan refleksi saat aplikasi berjalan:

import kotlinx.serialization.Serializable

@Serializable
data class User(val id: Long, val name: String, val email: String)

Merespons dengan Objek yang Dapat Diserialisasi

Setelah ContentNegotiation dipasang, teruskan objek @Serializable apa pun ke call.respond(). Ktor secara otomatis menserialisasikannya ke JSON:

get("/users/{id}") {
    val user = User(1L, "Alice", "alice@example.com")
    call.respond(user)  // serialized to JSON
}

Menerima Objek yang Dapat Diserialisasi

Gunakan call.receive() untuk mendeserialisasi isi permintaan menjadi kelas @Serializable. Jika isinya memiliki format yang tidak valid, Ktor melempar ContentTransformationException:

post("/users") {
    val newUser = call.receive<User>()
    call.respond(HttpStatusCode.Created, newUser)
}

Menyesuaikan Konfigurasi JSON

Teruskan instans Json ke json() untuk menyesuaikan serialisasi: abaikan kunci yang tidak dikenal, cetak dengan format rapi, gunakan mode longgar, dan sebagainya:

install(ContentNegotiation) {
    json(Json {
        prettyPrint = true
        isLenient = true
        ignoreUnknownKeys = true
    })
}

Beberapa Jenis Konten

Daftarkan beberapa konverter untuk mendukung berbagai jenis Accept. Ktor memilih konverter pertama yang cocok dengan header Accept milik klien:

install(ContentNegotiation) {
    json()
    // xml() with ktor-serialization-kotlinx-xml if needed
}

Menserialisasi Daftar dan Peta

Bungkus koleksi dalam objek respons atau gunakan call.respond(list) secara langsung. kotlinx.serialization menangani List, Map, dan generik bertingkat selama tipe elemennya berupa @Serializable:

get("/users") {
    val users = listOf(
        User(1, "Alice", "a@example.com"),
        User(2, "Bob", "b@example.com")
    )
    call.respond(users)
}

Serializer Kustom

Untuk tipe yang tidak Anda miliki (misalnya, java.time.Instant), implementasikan KSerializer dan daftarkan melalui @Serializable(with = MySerializer::class) atau modul serializer kontekstual:

val module = SerializersModule {
    contextual(Instant::class, InstantSerializer)
}
install(ContentNegotiation) {
    json(Json { serializersModule = module })
}

Menangani Kegagalan Deserialisasi

Pasang plugin StatusPages untuk mengembalikan respons kesalahan yang rapi ketika call.receive() gagal:

install(StatusPages) {
    exception<ContentTransformationException> { call, _ ->
        call.respond(HttpStatusCode.BadRequest, "Invalid request body")
    }
}

Pemeriksaan Singkat

Anotasi apa yang diperlukan pada kelas data Kotlin agar dapat diserialisasi oleh kotlinx.serialization?

Ringkasan: Negosiasi Konten dan kotlinx.serialization

Inti pembelajaran:

  • Pasang ContentNegotiation + json() untuk serialisasi/deserialisasi JSON otomatis
  • Beri anotasi @Serializable pada kelas data
  • Gunakan call.respond(obj) untuk melakukan serialisasi dan call.receive() untuk melakukan deserialisasi
  • Sesuaikan dengan instans Json { ... } yang diteruskan ke json()
  • Gunakan StatusPages untuk menangani kesalahan deserialisasi secara elegan
Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Negosiasi Konten dan kotlinx.serialization” gratis?

Ya — teks lengkap “Negosiasi Konten dan kotlinx.serialization” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Negosiasi Konten dan kotlinx.serialization”?

Konfigurasikan serialisasi JSON dan deserialisasikan isi permintaan secara otomatis. Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Negosiasi Konten dan kotlinx.serialization” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penyiapan Proyek Ktor: embeddedServer dan Modul Application
  2. Routing dan Parameter Bertipe
  3. Negosiasi Konten dan kotlinx.serialization
  4. Plugin Autentikasi: JWT dan Sesi
← Kembali ke Kotlin Academy