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); }
/
avec %2F
. ?
é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();