Routing und typisierte Parameter
Definieren Sie Routen mit Pfad- und Query-Parametern und gruppieren Sie sie mit route-Blöcken.
Routing und typisierte Parameter ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Grundlagen des Ktor-Routings
Routing in Ktor ist ein Plugin, das über install(Routing) { ... } oder die Kurzform routing { ... } installiert wird. Routen werden mit Funktionen für HTTP-Methoden definiert: get, post, put, delete, patch.
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}Pfadparameter
Definieren Sie einen Pfadparameter mit {name}. Greifen Sie über call.parameters["name"] darauf zu. Der Wert ist immer ein String?:
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}Optionale Pfadsegmente
Markieren Sie ein Segment durch Hinzufügen von ? als optional: {name?}. Wenn das Segment fehlt, gibt call.parameters["name"] den Wert null zurück.
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}Typkonvertierung von Parametern
Konvertieren Sie Pfadparameter mithilfe von Erweiterungsfunktionen für Parameters in typisierte Werte. Ktor stellt dafür integrierte Hilfsfunktionen bereit, oder Sie können eigene schreiben:
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}Query-Parameter
Greifen Sie über call.request.queryParameters["key"] auf Query-String-Parameter zu. Mehrere Werte für denselben Schlüssel sind über getAll("key") verfügbar:
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}Routen gruppieren
Gruppieren Sie verwandte Routen mit route("/prefix") { ... } unter einem gemeinsamen Präfix. Dadurch vermeiden Sie Wiederholungen und der Routing-Baum bleibt übersichtlich:
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}Routen in Funktionen organisieren
Lagern Sie Routengruppen in Erweiterungsfunktionen für Route aus, damit die Routing-Konfiguration modular bleibt:
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }Request-Body verarbeiten
Empfangen Sie einen Request-Body als Text, Bytes oder deserialisiertes Objekt (erfordert das ContentNegotiation-Plugin). Verwenden Sie call.receive für die typisierte Deserialisierung:
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}Mit Statuscodes antworten
Verwenden Sie call.respond(status, body) für vollständige Kontrolle oder die Komfortfunktionen call.respondText(), call.respondFile(), 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- und Tailcard-Routen
Verwenden Sie * für ein einzelnes Wildcard-Segment und {...} (Tailcard), um den restlichen Pfad als einzelnen Parameter zu erfassen:
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}Routenprioritäten
Ktor wertet Routen in der Reihenfolge ihrer Deklaration aus. Spezifischere Routen sollten vor Wildcards deklariert werden. Wenn zwei Routen übereinstimmen, wird die erste Übereinstimmung verwendet.
Schnelltest
Wie gruppieren Sie in Ktor mehrere Routen unter einem gemeinsamen URL-Präfix?
Rückblick: Routing und typisierte Parameter
Die wichtigsten Erkenntnisse:
- Definieren Sie Routen mit
get,postusw. innerhalb vonrouting { } - Pfadparameter:
{name}– Zugriff übercall.parameters["name"] - Query-Parameter:
call.request.queryParameters["key"] - Gruppieren Sie Routen mit
route("/prefix") { }und lagern Sie sie in Erweiterungsfunktionen fürRouteaus - Empfangen Sie typisierte Bodys mit
call.receive(ContentNegotiation erforderlich)()
Lerne Kotlin mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „Routing und typisierte Parameter“ kostenlos?
Ja — der vollständige Text von „Routing und typisierte Parameter“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Routing und typisierte Parameter“?
Definieren Sie Routen mit Pfad- und Query-Parametern und gruppieren Sie sie mit route-Blöcken. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Kotlin Academy zu starten?
Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Routing und typisierte Parameter“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?
Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Ktor-Projekt einrichten: embeddedServer und Application-Module
- Routing und typisierte Parameter
- Content Negotiation und kotlinx.serialization
- Authentifizierungs-Plugins: JWT und Session