Ktor Client添加URL参数失败:请求无法抵达Node.js后端
问题原因与解决方案
你的问题出在参数传递方式不匹配:
- Node.js后端定义的是路径变量(
/plants/delete/:id),要求ID直接作为URL路径的一部分,比如/plants/delete/123 - 你用Ktor的
parameter("id", plantId)添加的是查询参数,最终URL会变成/plants/delete?id=123,和后端期望的格式完全不符,所以请求无法被正确路由。
修正方法(两种任选其一)
方法1:直接拼接路径字符串
修改请求中的URL构建逻辑,把ID直接拼到路径末尾:
// PlantApiImplementation.kt override suspend fun deletePlant(plantId: String): DeletePlantResponseDTO? { return try { client.delete { url("${HttpRoutes.deletePlantRoute}/$plantId") contentType(ContentType.Application.Json) } } catch (error: Exception) { null } }
方法2:用Ktor的路径变量替换(更规范)
先在路由常量里定义带占位符的路径:
// HttpRoutes.kt const val deletePlantRoute = "$backendUrl/plants/delete/{id}"
然后在请求时替换占位符:
// PlantApiImplementation.kt override suspend fun deletePlant(plantId: String): DeletePlantResponseDTO? { return try { client.delete { url(deletePlantRoute) { set("id", plantId) } contentType(ContentType.Application.Json) } } catch (error: Exception) { null } }
两种方法都能生成后端期望的/plants/delete/xxx格式URL,请求就能被正确路由到对应的处理函数了。
内容的提问来源于stack exchange,提问作者Fiehra
相关产品推荐
相关产品推荐

