改造2 – dynamicurl

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

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

但是,在我的应用程序中,我的webservices的URL在编译时不知道,应用程序检索到他们在一个下载的文件,所以我想知道如何使用完整的dynamicURL的Retrofit 2。

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

 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没有看到path实际上是一个完整的URL,并试图下载http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

任何暗示,我可以如何使用Retrofit这样的dynamicurl?

谢谢

Solutions Collecting From Web of "改造2 – dynamicurl"

我觉得你用错了。 以下是更新日志的摘录:

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

所以你的界面应该是这样的:

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

我只想replaceurl的一部分,并且用这个解决scheme,我不必传递整个url,只是dynamic部分:

 public interface APIService { @GET("users/{user_id}/playlists") Call<List<Playlist> getUserPlaylists(@Path(value = "user_id", encoded = true) String userId); } 

至于Retrofit 2.0.0-beta2,如果你有一个服务响应这个URL的JSON: http:// myhost / mypath

以下不起作用:

 public interface ClientService { @GET("") Call<List<Client>> getClientList(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList().execute(); 

但是这没关系:

 public interface ClientService { @GET Call<List<Client>> getClientList(@Url String anEmptyString); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://myhost/mypath") .addConverterFactory(GsonConverterFactory.create()) .build(); ClientService service = retrofit.create(ClientService.class); Response<List<Client>> response = service.getClientList("").execute(); 

您可以使用@Path注释中的编码标志:

 public interface APIService { @GET("{fullUrl}") Call<Users> getUsers(@Path(value = "fullUrl", encoded = true) String fullUrl); } 
  • 这将防止用%2Freplace/
  • 它不会救你?%3Freplace,所以你仍然不能传入dynamic查询string。