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

Retrofit中BaseUrl与API接口配置问题求助

解决Retrofit中BaseUrl配置与API路径拆分的问题

你遇到的核心问题是没有正确遵循Retrofit对BaseUrl和接口路径的拆分规则,同时初始配置还犯了把查询参数混入BaseUrl的错误,咱们一步步来修正:

1. 明确BaseUrl的正确规则

Retrofit对BaseUrl有严格要求:

  • 必须以 / 结尾
  • 只能包含域名+固定的基础路径,不能包含接口的具体路径、查询参数(比如?api-key=xxx这类)

你原来的BaseUrl https://api.nytimes.com/svc/movies/v2/critics/full-time.json?api-key=abcdefghijklmnop 完全不符合规范,它既包含了接口的具体路径,还带上了查询参数。正确的BaseUrl应该是这个API的基础前缀:

https://api.nytimes.com/svc/movies/v2/

2. 修正接口中的API路径与参数

原接口的@GET("results")和实际API路径不匹配,而且查询参数api-key不应该写死在路径里,应该通过@Query注解动态传入。修改后的接口如下:

public interface ConnectAPI {
    // 路径对应拆分后的接口部分,api-key作为查询参数传入
    @GET("critics/full-time.json")
    Call<List<Reviewers>> getReviewers(@Query("api-key") String apiKey);
}

3. 重新构建正确的Retrofit实例

用合规的BaseUrl重新创建Retrofit对象:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.nytimes.com/svc/movies/v2/") // 确保以/结尾
    .addConverterFactory(GsonConverterFactory.create())
    .build();

4. 正确调用接口

调用接口时传入你的API Key即可:

ConnectAPI apiService = retrofit.create(ConnectAPI.class);
Call<List<Reviewers>> call = apiService.getReviewers("abcdefghijklmnop");
// 后续执行异步/同步请求逻辑...

为什么之前的配置失败?

  • 原BaseUrl包含了完整接口路径和查询参数,Retrofit无法正确拼接请求URL
  • 接口中@GET("results")的路径和实际API路径不匹配,导致最终请求地址错误

调整后,Retrofit会自动拼接BaseUrl和接口路径,并添加查询参数,生成正确的请求地址:https://api.nytimes.com/svc/movies/v2/critics/full-time.json?api-key=abcdefghijklmnop

内容的提问来源于stack exchange,提问作者Mr.Goomer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:27:45