Retrofit 2 – URL dynamic

Avec Retrofit 2, vous pouvez définir une URL complète dans l’annotation d’une méthode de service comme:

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

Cependant, dans mon application, l’URL de mes services Web n’est pas connue au moment de la compilation, l’application les récupère dans un fichier téléchargé. Je me demande donc comment utiliser Retrofit 2 avec une URL dynamic complète.

J’ai essayé de définir un chemin complet comme:

 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(); 

Mais ici, Retrofit ne voit pas que le chemin est en fait une URL complète et essaie de télécharger http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

Un indice sur la façon dont je pourrais utiliser Retrofit avec une telle URL dynamic?

Je vous remercie

Je pense que vous l’utilisez mal. Voici un extrait du changelog :

Nouveau: l’annotation de paramètre @Url permet de transmettre une URL complète à un noeud final.

Donc, votre interface devrait être comme ceci:

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

Je voulais ne remplacer qu’une partie de l’url, et avec cette solution, je n’ai pas à passer l’URL entière, juste la partie dynamic:

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

Vous pouvez utiliser l’indicateur codé sur l’annotation @Path :

 public interface APIService { @GET("{fullUrl}") Call getUsers(@Path(value = "fullUrl", encoded = true) Ssortingng fullUrl); } 
  • Cela empêchera le remplacement de / avec %2F .
  • Cela ne vous sauvera pas ? étant remplacé par %3F , vous ne pouvez toujours pas transmettre les chaînes de requêtes dynamics.

Depuis Retrofit 2.0.0-beta2, si vous avez un service JSON répondant à cette URL: http: // myhost / mypath

Ce qui suit ne fonctionne pas:

 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(); 

Mais c’est ok:

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