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

如何在Retrofit中正确拼接API路径?@Path参数异常问题求助

Retrofit @Path 导致URL拼接异常的解决方案

看起来你遇到的问题是Retrofit在处理@Path注解时,生成了不符合预期的URL,出现了重复路径和不必要的URL转义字符。咱们一步步排查解决:

可能的原因及对应解决方案

1. Base URL 与接口路径重复拼接

Retrofit对Base URL和接口注解中的路径有明确的拼接规则:

  • 如果Base URL以/结尾,且接口路径不以/开头,会自动拼接两者;
  • 如果接口路径以/开头,会直接替换Base URL的路径部分。

你的实际请求URL里出现了重复的路径片段(还注意到拼写不一致:代码里是customer-management,实际请求是customer-manegement,这个拼写错误得先修正!),大概率是Base URL已经包含了/customer-management前缀,而接口注解又重复写了这部分路径。

修正方式:

  • 假设你的Retrofit Base URL是http://localhost/customer-management/,那么接口注解应该改为:
    @DELETE("id/{id}") 
    fun deleteUser(@Path("id") id: String): Single<Response<ResponseBody>>
    
  • 如果Base URL是http://localhost/,那保持原注解即可,但要统一拼写(把customer-manegement改成customer-management)。

2. 传入的id参数包含多余路径

从实际请求的URL里的%2Fcustomer-management%2id%2F9a4615d5-aaa9-4a56-ff43-fb4ef7a54f96可以看出,id参数被URL编码后包含了路径字符/,说明你调用deleteUser时传入的不是纯UUID字符串,而是带了完整路径的字符串(比如"/customer-management/id/9a4615d5-aaa9-4a56-ff43-fb4ef7a54f96")。

修正方式:
调用方法时只传入纯UUID:

deleteUser("9a4615d5-aaa9-4a56-ff43-fb4ef7a54f96")

3. 验证拼写一致性

仔细检查Base URL、接口注解中的路径拼写:代码里是customer-management,但实际请求是customer-manegement(少了一个a),这种拼写错误也会导致URL不符合预期,务必统一拼写。

额外调试建议

可以给Retrofit添加日志拦截器(比如OkHttp的HttpLoggingInterceptor),打印完整的请求URL和参数,这样能更直观地看到Base URL和接口路径的拼接过程,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:56:39