Retrofit 2 – URL dinámica

Con Retrofit 2, puede establecer una URL completa en la anotación de un método de servicio como:

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

Sin embargo, en mi aplicación, la URL de mis servicios web no se conoce en tiempo de comstackción, la aplicación los recupera en un archivo descargado, así que me pregunto cómo puedo usar Retrofit 2 con una URL dinámica completa.

Intenté establecer un camino completo como:

 public interface APIService { @GET("{fullUrl}") Call 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(); 

Pero aquí, Retrofit no ve que la ruta es en realidad una URL completa y está intentando descargar http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

¿Algún indicio de cómo podría usar Retrofit con esa URL dinámica?

Gracias

    Creo que lo estás usando de manera incorrecta. Aquí hay un extracto del registro de cambios :

    Nuevo: la anotación del parámetro @Url permite pasar una URL completa para un punto final.

    Entonces tu interfaz debería ser así:

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

    Quería reemplazar solo una parte de la url, y con esta solución, no tengo que pasar toda la url, solo la parte dinámica:

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

    Puede usar el indicador codificado en la anotación @Path :

     public interface APIService { @GET("{fullUrl}") Call getUsers(@Path(value = "fullUrl", encoded = true) String fullUrl); } 
    • Esto evitará el reemplazo de / con %2F .
    • No te salvará ? sin embargo, es reemplazado por %3F , por lo que aún no puede pasar cadenas dinámicas de consulta.

    A partir de Retrofit 2.0.0-beta2, si tiene un servicio que responde JSON desde esta URL: http: // myhost / mypath

    Lo siguiente no está funcionando:

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

    Pero esto está bien:

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