- 使用
Parameters
对象:
- 在Ktor中,处理GET请求参数通常通过
Parameters
对象来完成。Parameters
是一个包含多个键值对的集合,用于存储请求参数。
- 假设我们有一个路由处理函数,例如:
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.request.*
import io.ktor.response.*
import io.ktor.routing.*
fun Application.module() {
routing {
get("/example") {
val parameters: Parameters = call.request.queryParameters
// 获取单个参数
val param1 = parameters["param1"]
// 获取多个同名参数,例如URL为 /example?param2=value1¶m2=value2
val param2Values = parameters.getAll("param2")
// 解析参数,假设param1是Int类型
val param1AsInt = param1?.toIntOrNull()
call.respondText("param1: $param1, param2 values: $param2Values")
}
}
}
- 使用
@RequestParam
注解(如果使用Ktor的某些扩展库支持):
- 一些Ktor的扩展库可能支持类似Spring的
@RequestParam
注解方式来获取参数。
- 首先需要引入相关依赖(如果适用),然后在路由处理函数参数中使用该注解。例如:
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.request.*
import io.ktor.response.*
import io.ktor.routing.*
// 假设引入了支持@RequestParam的扩展库
import com.example.annotations.RequestParam
fun Application.module() {
routing {
get("/example") {
fun handleRequest(
@RequestParam("param1") param1: String?,
@RequestParam("param2") param2: List<String>?
) {
call.respondText("param1: $param1, param2 values: $param2")
}
handleRequest()
}
}
}
- 使用
ParameterMap
的便捷扩展函数:
Parameters
对象提供了一些便捷的扩展函数来获取特定类型的参数。例如,getInt
,getLong
等。
import io.ktor.application.*
import io.ktor.http.*
import io.ktor.request.*
import io.ktor.response.*
import io.ktor.routing.*
fun Application.module() {
routing {
get("/example") {
val parameters: Parameters = call.request.queryParameters
val param1AsInt = parameters.getInt("param1")
call.respondText("param1 as int: $param1AsInt")
}
}
}
getInt
函数在参数不存在或无法转换为Int
时会返回null
。如果需要提供默认值,可以使用getIntOrFail
(会抛出异常)或手动处理null
情况设置默认值。