MST
星途 面试题库

面试题:Kotlin Ktor路由中如何实现参数验证及异常处理

在Kotlin Ktor应用中,有一个接收商品ID作为路径参数的路由,用于获取商品详情。要求对传入的商品ID进行有效性验证(假设商品ID必须是正整数),如果验证不通过,需要返回合适的HTTP错误响应。请阐述实现思路并编写相应代码。
42.2万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 在路由定义中获取路径参数商品ID。
  2. 对获取到的商品ID进行有效性验证,判断是否为正整数。
  3. 如果验证不通过,返回合适的HTTP错误响应,例如HttpStatusCode.BadRequest
  4. 如果验证通过,执行获取商品详情的逻辑。

代码实现

import io.ktor.application.*
import io.ktor.http.*
import io.ktor.response.*
import io.ktor.routing.*

fun Application.module() {
    routing {
        get("/product/{productId}") {
            val productIdParam = call.parameters["productId"]
            if (productIdParam == null || !isValidProductId(productIdParam)) {
                call.respond(HttpStatusCode.BadRequest, "Invalid product ID")
            } else {
                val productId = productIdParam.toInt()
                // 执行获取商品详情的逻辑,这里假设存在getProductDetails函数
                val productDetails = getProductDetails(productId)
                call.respond(productDetails)
            }
        }
    }
}

private fun isValidProductId(id: String): Boolean {
    return try {
        val productId = id.toInt()
        productId > 0
    } catch (e: NumberFormatException) {
        false
    }
}

// 假设的获取商品详情函数
private fun getProductDetails(productId: Int): String {
    return "Product details for ID $productId"
}