Android Retrofit - 如何覆盖baseUrl

14

我在改装适配器中为所有调用使用了一个基础URL。因此:

  Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

假设上面是我的代码,我现在所有的调用都使用那个baseUrl。但是对于一个特定的调用,我想改变基础URL,我不想为此创建另一个REST适配器,因为它仅用于本地测试。我能否更改接口中的端点,以不使用baseUrl,或者是否有注释可以提供自己的baseUrl?

2个回答

35

您可以使用@Url注释来提供完整的URL,例如:

@GET
Call<GitHubUser> getUser(@Url String url);

我正在使用'com.squareup.retrofit:retrofit:1.8.0',它会起作用吗?现在它说找不到那个注释。我在文档中没有看到它:http://static.javadoc.io/com.squareup.retrofit/retrofit/1.8.0/index.html?retrofit/http/package-tree.html - j2emanue
我遇到了一个异常:java.lang.IllegalArgumentException: @Url不能与@GET URL(参数#1)一起使用。 - JPLauber
@sativa,如果不看你的使用方式,很难说出具体原因和解决方法。 - Blackbelt
像这样(这是 Kotlin 而不是 Java)@GET("api/1/route") fun route(@Url url: String = "https://myurl.com"): Observable<Route> - JPLauber
你正在错误地使用它。@URL需要完整的端点URL。有一种方法可以覆盖你在Retrofit中提供的基本URL。\@GET fun route(\@Url url: String = "myurl.com/api/1/route"): Observable<Route>是一个有效的选项。 - Blackbelt

20

在Retrofit2中,@GET中的路径会覆盖基本URL。

 @GET("https://someurl/api/supermarkets")
 Observable<List<TechIndex>> getTechIndexList();

无论基础url是什么,请求都将发送到"someurl/api/.."。希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接