Kotlin Academy · Ders

İçerik Anlaşması ve kotlinx.serialization

JSON serileştirmesini yapılandırın ve istek gövdelerini otomatik olarak serileştirmeden çıkarın.

3. ders / 413 adım

İçerik Anlaşması ve kotlinx.serialization, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

İçerik Anlaşması Nedir?

İçerik anlaşması, istemci ile sunucunun yanıt gövdesinin biçimi üzerinde anlaşmasını sağlayan HTTP mekanizmasıdır. İstemci bir Accept üst bilgisi gönderir; sunucu en uygun eşleşen biçimi seçer. Ktor'un ContentNegotiation eklentisi bu işlemi otomatikleştirir.

Bağımlılıkları Ekleme

ContentNegotiation eklentisini ve kotlinx.serialization JSON dönüştürücüsünü ekleyin:

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'ı Yükleme

Eklentiyi bir Application modülüne yükleyin ve JSON dönüştürücüsünü kaydedin:

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

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

@Serializable Veri Sınıfları

Veri sınıflarınızı kotlinx.serialization içindeki @Serializable ile işaretleyin. Kotlin derleyici eklentisi serileştiriciyi derleme zamanında oluşturur; çalışma zamanında yansıtma gerekmez:

import kotlinx.serialization.Serializable

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

Serileştirilebilir Nesneyle Yanıt Verme

ContentNegotiation yüklendikten sonra herhangi bir @Serializable nesnesini call.respond() işlevine aktarın. Ktor bu nesneyi otomatik olarak JSON'a serileştirir:

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

Serileştirilebilir Nesne Alma

İstek gövdesini bir @Serializable sınıfına serileştirmeden çıkarmak için call.receive<T>() kullanın. Gövde hatalı biçimlendirilmişse Ktor bir ContentTransformationException fırlatır:

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

JSON Yapılandırmasını Özelleştirme

Serileştirmeyi özelleştirmek için Json örneğini json() işlevine aktarın; bilinmeyen anahtarları yok sayabilir, okunaklı biçimlendirme kullanabilir, esnek modu etkinleştirebilirsiniz vb.:

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

Birden Çok İçerik Türü

Farklı Accept türlerini desteklemek için birden çok dönüştürücü kaydedin. Ktor, istemcinin Accept üst bilgisiyle eşleşen ilk dönüştürücüyü seçer:

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

Listeleri ve Haritaları Serileştirme

Koleksiyonları bir yanıt nesnesi içine sarın veya doğrudan call.respond(list) kullanın. Öğe türleri @Serializable olduğu sürece kotlinx.serialization, List<T>, Map<K,V> ve iç içe genel türleri işleyebilir:

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

Özel Serileştiriciler

Sahibi olmadığınız türler için (örneğin java.time.Instant) bir KSerializer<T> uygulayın ve bunu @Serializable(with = MySerializer::class) aracılığıyla veya bağlamsal bir serileştirici modülüyle kaydedin:

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

Serileştirmeden Çıkarma Hatalarını İşleme

call.receive() başarısız olduğunda temiz bir hata yanıtı döndürmek için StatusPages eklentisini yükleyin:

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

Hızlı Kontrol

Bir Kotlin veri sınıfının kotlinx.serialization tarafından serileştirilebilmesi için üzerinde hangi ek açıklama bulunmalıdır?

Özet: İçerik Anlaşması ve kotlinx.serialization

Önemli noktalar:

  • JSON serileştirme ve serileştirmeden çıkarma işlemlerini otomatikleştirmek için ContentNegotiation + json() yükleyin
  • Veri sınıflarını @Serializable ile işaretleyin
  • Serileştirmek için call.respond(obj), serileştirmeden çıkarmak için call.receive() kullanın
  • json()'a aktarılan bir Json { ... } örneğiyle özelleştirin
  • Serileştirmeden çıkarma hatalarını düzgün bir şekilde ele almak için StatusPages kullanın
Başlamak ücretsiz

Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“İçerik Anlaşması ve kotlinx.serialization” dersi ücretsiz mi?

Evet — “İçerik Anlaşması ve kotlinx.serialization” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“İçerik Anlaşması ve kotlinx.serialization” dersinde ne öğreneceğim?

JSON serileştirmesini yapılandırın ve istek gövdelerini otomatik olarak serileştirmeden çıkarın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İçerik Anlaşması ve kotlinx.serialization” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Ktor Projesi Kurulumu: embeddedServer ve Application Modülleri
  2. Yönlendirme ve Türlendirilmiş Parametreler
  3. İçerik Anlaşması ve kotlinx.serialization
  4. Kimlik Doğrulama Eklentileri: JWT ve Oturum
← Kotlin Academy Sayfasına Dön