改造2-动态网址


181

使用Retrofit 2,您可以在服务方法的注释中设置完整的URL,例如:

public interface APIService {
  @GET("http://api.mysite.com/user/list")
  Call<Users> getUsers();
}

但是,在我的应用程序中,我的Web服务的URL在编译时未知,该应用程序在下载的文件中检索它们,因此我想知道如何将Retrofit 2与完整的动态URL结合使用。

我试图设置一个完整的路径,如:

public interface APIService {
  @GET("{fullUrl}")
  Call<Users> getUsers(@Path("fullUrl") fullUrl);
}

new Retrofit.Builder()
  .baseUrl("http://api.mysite.com/")
  .build()
  .create(APIService.class)
  .getUsers("http://api.mysite.com/user/list"); // this url should be dynamic
  .execute();

但是在这里,Retrofit并未看到该路径实际上是完整的URL,而是试图下载 http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

关于如何将Retrofit与此类动态url一起使用的任何提示?

谢谢


5
对于将来的搜索者,有一个带有翻新
peitek

Answers:


389

我认为您使用的方式有误。这是变更日志的摘录:

新增:@Url参数注释允许为端点传递完整的URL。

因此,您的界面应如下所示:

public interface APIService {
    @GET
    Call<Users> getUsers(@Url String url);
}

1
@ pdegand59这是全新的:)参见
变更

2
为什么端点的URL是完整URL,为什么仍需要baseurl?
Billyjoker

13
如果我使用此@Url注释。那我们应该在.baseUrl()中写些什么呢?
Gulnaz Ghanchi'6

12
您应该编写主网址。@Url参数将始终覆盖它。
Yazazzello

4
我尝试添加像一个以上,但的baseUrl,我通常的改装制造商设置的URL会取代完整网址我在参数中指定因此而不是将其作为的dynamic.com它被翻译成MyBaseUrl / HTTP://dynamic.com
乔纳森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.