Kotlin Academy · पाठ

Content Negotiation और kotlinx.serialization

JSON serialization configure करें और request bodies को स्वतः deserialize करें।

पाठ 3, कुल 4 में से13 चरण

Content Negotiation और kotlinx.serialization, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कंटेंट नेगोशिएशन क्या है

कंटेंट नेगोशिएशन वह 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 ऑब्जेक्ट प्राप्त करना

अनुरोध के मुख्य भाग को @Serializable क्लास में डिसीरियलाइज़ करने के लिए call.receive<T>() का उपयोग करें। यदि मुख्य भाग का प्रारूप गलत है, तो 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<T>, Map<K,V> और नेस्टेड जेनेरिक प्रकारों को संभालता है:

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

कस्टम सीरियलाइज़र

जिन प्रकारों के स्वामी आप नहीं हैं (जैसे, java.time.Instant), उनके लिए KSerializer<T> लागू करें और उसे @Serializable(with = MySerializer::class) के माध्यम से या किसी संदर्भित सीरियलाइज़र मॉड्यूल के साथ पंजीकृत करें:

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

डिसीरियलाइज़ेशन विफलताओं को संभालना

जब call.receive() विफल हो जाए, तब साफ़-सुथरी त्रुटि प्रतिक्रिया लौटाने के लिए StatusPages प्लगइन इंस्टॉल करें:

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

त्वरित जाँच

किस एनोटेशन की आवश्यकता होती है, ताकि Kotlin डेटा क्लास को kotlinx.serialization द्वारा सीरियलाइज़ किया जा सके?

पुनरावलोकन: कंटेंट नेगोशिएशन और kotlinx.serialization

मुख्य बातें:

  • स्वचालित JSON सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए ContentNegotiation + json() इंस्टॉल करें
  • डेटा क्लास पर @Serializable एनोटेशन लगाएँ
  • सीरियलाइज़ करने के लिए call.respond(obj) और डीसीरियलाइज़ करने के लिए call.receive() का उपयोग करें
  • json() में दिए गए Json { ... } इंस्टेंस से अनुकूलित करें
  • डीसीरियलाइज़ेशन की त्रुटियों को सहजता से संभालने के लिए StatusPages का उपयोग करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Content Negotiation और kotlinx.serialization” पाठ निःशुल्क है?

हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Content Negotiation और kotlinx.serialization” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Content Negotiation और kotlinx.serialization” में मैं क्या सीखूँगा?

JSON serialization configure करें और request bodies को स्वतः deserialize करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Content Negotiation और kotlinx.serialization” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Ktor Project Setup: embeddedServer और Application Modules
  2. Routing और Typed Parameters
  3. Content Negotiation और kotlinx.serialization
  4. Authentication Plugins: JWT और Session
← Kotlin Academy पर वापस जाएँ