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
相关产品推荐
相关产品推荐

