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

如何向Retrofit动态传递HTTP请求方法类型并解决参数匹配报错问题

错误原因
  • @Path注解的作用是替换@HTTP注解中path参数里的占位符,你给@HTTP的path参数填的值是"{url}",里面没有{method}占位符,却用@Path("method")声明了要替换method占位符,自然匹配失败抛出异常。
  • 同时你还同时声明了@Url参数和path里的{url}占位符,二者功能冲突,@Url会直接覆盖path的配置,不需要在path里写url相关占位符。
修复方案

直接修改接口注解代码即可,修改后逻辑满足Retrofit的校验规则,同时保留动态适配请求方法、动态传入请求地址的能力:

// path里增加{method}占位符匹配@Path注解,hasBody设为true兼容POST/PUT等带请求体的请求
@HTTP(method = "{method}", path = "{method}", hasBody = true)
fun callAPIs(
    @Path(value = "method") httpMethod: String,
    @Header("Authorization") auth: String,
    @Header("app-version") app_version: String,
    @Body data: JsonObject,
    @Url url: String
): Call<JsonElement>
注意事项
  • 如果调用GET、HEAD这类不允许携带请求体的方法,需要把@Body参数改成可选类型,或者调用时传空的JsonObject,避免抛出请求方法不支持body的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:07