Sisällön neuvottelu ja kotlinx.serialization
Määrittäkää JSON-serialisointi ja purkakaa pyyntöjen rungot automaattisesti.
Sisällön neuvottelu ja kotlinx.serialization on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä sisältöneuvottelu on
Sisältöneuvottelu on HTTP-mekanismi, jolla asiakas ja palvelin sopivat vastausrungon muodosta. Asiakas lähettää Accept-otsakkeen, ja palvelin valitsee parhaiten sopivan muodon. Ktorin ContentNegotiation-laajennus automatisoi tämän.
Riippuvuuksien lisääminen
Lisää ContentNegotiation-laajennus ja kotlinx.serialization-kirjaston JSON-muunnin:
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-laajennuksen asentaminen
Asenna laajennus Application-moduulissa ja rekisteröi JSON-muunnin:
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.serialization.kotlinx.json.*
fun Application.configureSerialization() {
install(ContentNegotiation) {
json()
}
}@Serializable-tietoluokat
Merkitse tietoluokkasi kotlinx.serialization-kirjaston @Serializable-annotaatiolla. Kotlin-kääntäjän laajennus luo serialisoijan käännösaikana, joten ajonaikaista reflektiota ei tarvita:
import kotlinx.serialization.Serializable
@Serializable
data class User(val id: Long, val name: String, val email: String)Vastaaminen serialisoitavalla oliolla
Kun ContentNegotiation-laajennus on asennettu, välitä mikä tahansa @Serializable-olio kutsulle call.respond(). Ktor serialisoi sen automaattisesti JSON-muotoon:
get("/users/{id}") {
val user = User(1L, "Alice", "alice@example.com")
call.respond(user) // serialized to JSON
}Serialisoitavan olion vastaanottaminen
Käytä kutsua call.receive deserialisoidaksesi pyynnön rungon @Serializable-luokan olioksi. Jos runko on virheellinen, Ktor heittää ContentTransformationException-poikkeuksen:
post("/users") {
val newUser = call.receive<User>()
call.respond(HttpStatusCode.Created, newUser)
}JSON-määrityksen mukauttaminen
Välitä Json-ilmentymä json()-funktiolle serialisoinnin mukauttamiseksi: ohita tuntemattomat avaimet, muotoile tuloste luettavaksi, käytä sallivaa tilaa ja niin edelleen:
install(ContentNegotiation) {
json(Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
})
}Useat sisältötyypit
Rekisteröi useita muuntimia tukeaksesi eri Accept-tyyppejä. Ktor valitsee ensimmäisen muuntimen, joka vastaa asiakkaan Accept-otsaketta:
install(ContentNegotiation) {
json()
// xml() with ktor-serialization-kotlinx-xml if needed
}Listojen ja map-rakenteiden serialisointi
Kääri kokoelmat vastausolioon tai käytä suoraan kutsua call.respond(list). kotlinx.serialization käsittelee tyyppejä List, Map ja sisäkkäisiä geneerisiä tyyppejä, kunhan alkiotyypit ovat @Serializable:
get("/users") {
val users = listOf(
User(1, "Alice", "a@example.com"),
User(2, "Bob", "b@example.com")
)
call.respond(users)
}Mukautetut serialisoijat
Jos kyseessä on tyyppi, jota et omista (esimerkiksi java.time.Instant), toteuta KSerializer ja rekisteröi se joko kutsulla @Serializable(with = MySerializer::class) tai kontekstuaalisella serialisoijamoduulilla:
val module = SerializersModule {
contextual(Instant::class, InstantSerializer)
}
install(ContentNegotiation) {
json(Json { serializersModule = module })
}Deserialisointivirheiden käsittely
Asentakaa StatusPages-laajennus, jotta call.receive-kutsun epäonnistuessa palautetaan selkeä virhevastaus:
install(StatusPages) {
exception<ContentTransformationException> { call, _ ->
call.respond(HttpStatusCode.BadRequest, "Invalid request body")
}
}Pikatarkistus
Mikä annotaatio Kotlinin data-luokalle tarvitaan, jotta kotlinx.serialization voi serialisoida sen?
Kertaus: Content Negotiation ja kotlinx.serialization
Tärkeimmät asiat:
- Asentakaa
ContentNegotiationjajson()automaattista JSON-serialisointia ja -deserialisointia varten - Lisätkää data-luokkiin annotaatio
@Serializable - Käyttäkää
call.respond(obj)-kutsua serialisointiin jacall.receive-kutsua deserialisointiin() - Mukauttakaa toimintaa välittämällä
Json { ... }-instanssi funktiollejson() - Käsitelkää deserialisointivirheet hallitusti
StatusPages-laajennuksen avulla
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Sisällön neuvottelu ja kotlinx.serialization” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Sisällön neuvottelu ja kotlinx.serialization”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Sisällön neuvottelu ja kotlinx.serialization”?
Määrittäkää JSON-serialisointi ja purkakaa pyyntöjen rungot automaattisesti. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Sisällön neuvottelu ja kotlinx.serialization”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?
Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Ktor-projektin määritys: embeddedServer ja Application-moduulit
- Reititys ja tyypitetyt parametrit
- Sisällön neuvottelu ja kotlinx.serialization
- Todennusliitännäiset: JWT ja istunto