Negosiasi Konten dan kotlinx.serialization
Konfigurasikan serialisasi JSON dan deserialisasikan isi permintaan secara otomatis.
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
@Serializablepada kelas data - Gunakan
call.respond(obj)untuk melakukan serialisasi dancall.receiveuntuk melakukan deserialisasi() - Sesuaikan dengan instans
Json { ... }yang diteruskan kejson() - Gunakan
StatusPagesuntuk menangani kesalahan deserialisasi secara elegan
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
- Penyiapan Proyek Ktor: embeddedServer dan Modul Application
- Routing dan Parameter Bertipe
- Negosiasi Konten dan kotlinx.serialization
- Plugin Autentikasi: JWT dan Sesi