You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目使用Retrofit2实现带路径ID的GET请求问题咨询

你当前的实现核心问题是混淆了**路径参数(Path Param)和查询参数(Query Param)**的使用场景,手动拼接路径参数不仅不规范,还容易出现转义、拼写错误等问题,Retrofit本身提供了标准的路径参数占位符方案,无需手动拼接。

正确实现方案

1. 改造API接口定义

直接用@Path注解声明路径中的动态参数,固定的查询参数可以直接写在@GET的路径里,无需手动拼接:

interface SpoonacularApi {
    // 用{recipeId}做路径占位符,固定查询参数直接写在路径后缀
    @GET("/recipes/{recipeId}/information?includeNutrition=false")
    suspend fun getRecipeById(
        @Path("recipeId") recipeId: Int, // 路径参数自动替换占位符
        @Query("apiKey") apiKey: String // 动态查询参数用@Query传入
    ): Response<PersonalizedRecipeResult>
}

2. 调用方式简化

不需要再写手动拼接路径的工具方法,直接传入食谱ID和apiKey即可:

// 调用示例
val response = spoonacularApi.getRecipeById(
    recipeId = 716429,
    apiKey = API_KEY
)
// 后续处理响应逻辑
优化说明
  • 不需要手动拼接任何路径或查询参数,所有动态值都通过Retrofit注解传入,避免转义错误
  • 固定查询参数(比如这里的includeNutrition=false)直接写在@GET路径中,代码可读性更高
  • 如果后续需要动态控制includeNutrition的取值,只需要把它改成@Query参数即可:
@GET("/recipes/{recipeId}/information")
suspend fun getRecipeById(
    @Path("recipeId") recipeId: Int,
    @Query("includeNutrition") includeNutrition: Boolean,
    @Query("apiKey") apiKey: String
): Response<PersonalizedRecipeResult>

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:24:05