Ruting og typede parametere
Definer ruter med bane- og query-parametere, og grupper dem med route-blokker.
Ruting og typede parametere er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Grunnleggende ruting i Ktor
Ruting i Ktor er en plugin som installeres via install(Routing) { ... } eller kortformen routing { ... }. Ruter defineres med funksjoner for HTTP-metoder: get, post, put, delete og patch.
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}Stiparametere
Definer en sti-parameter med {name}. Få tilgang til den via call.parameters["name"]. Verdien er alltid en String?:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}Valgfrie stisegmenter
Gjør et segment valgfritt ved å legge til ?: {name?}. Hvis segmentet mangler, returnerer call.parameters["name"] null.
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}Konvertere parametere til riktige typer
Konverter sti-parametere til verdier med riktige typer ved hjelp av utvidelsesfunksjoner på Parameters. Ktor tilbyr innebygde hjelpefunksjoner, eller man kan skrive egne:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}Spørringsparametere
Få tilgang til parametere i spørringsstrengen via call.request.queryParameters["key"]. Flere verdier for samme nøkkel er tilgjengelige via getAll("key"):
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}Gruppere ruter
Gruppér relaterte ruter under et felles prefiks med route("/prefix") { ... }. Dette reduserer gjentakelser og gjør rutetreet lettere å lese:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}Organisere ruter i funksjoner
Trekk ut rutegrupper til utvidelsesfunksjoner på Route for å holde rutekonfigurasjonen modulær:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }Håndtere forespørselsinnhold
Motta innholdet i en forespørsel som tekst, byte eller et deserialisert objekt (krever pluginen ContentNegotiation). Bruk call.receive for deserialisering til riktig type:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}Svare med statuskoder
Bruk call.respond(status, body) for full kontroll, eller de praktiske metodene call.respondText(), call.respondFile() og call.respond(HttpStatusCode.NotFound):
get("/users/{id}") {
val user = userRepo.find(call.parameters["id"])
if (user == null) call.respond(HttpStatusCode.NotFound)
else call.respond(user)
}Wildcard- og tailcard-ruter
Bruk * for ett enkelt wildcard-segment og {...} (tailcard) for å matche resten av stien som én enkelt parameter:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}Ruteprioriteringer
Ktor evaluerer ruter i deklarasjonsrekkefølge. Mer spesifikke ruter bør deklareres før wildcards. Når to ruter samsvarer, vinner den første.
Kort kontroll
Hvordan grupperer man flere ruter under et felles URL-prefiks i Ktor?
Oppsummering: Ruting og typede parametere
Viktigste punkter:
- Definer ruter med
get,postog så videre irouting { } - Stiparametere:
{name}— få tilgang viacall.parameters["name"] - Spørringsparametere:
call.request.queryParameters["key"] - Gruppér ruter med
route("/prefix") { }, og trekk dem ut til utvidelsesfunksjoner påRoute - Motta innhold med riktig type via
call.receive(krever ContentNegotiation)()
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Ruting og typede parametere» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Ruting og typede parametere», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Ruting og typede parametere»?
Definer ruter med bane- og query-parametere, og grupper dem med route-blokker. Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Kotlin Academy?
Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Ruting og typede parametere»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?
Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Ktor-prosjektoppsett: embeddedServer og Application-moduler
- Ruting og typede parametere
- Innholdsforhandling og kotlinx.serialization
- Autentiseringsplugins: JWT og session