Retrofit 2 supprime les caractères après le nom d’hôte de l’URL de base

J’utilise Retrofit pour accéder à une API RESTful. L’URL de base est:

http://api.example.com/service

Ceci est le code de l’interface:

public interface ExampleService { @Headers("Accept: Application/JSON") @POST("/album/featured-albums") Call<List> listFeaturedAlbums(); } 

et voici comment j’envoie la demande et reçois la réponse:

 new AsyncTask<Void, Void, Response<List>>() { @Override protected Response<List> doInBackground(Void... params) { Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.example.com/service") .addConverterFactory(GsonConverterFactory.create()) .build(); ExampleService service = retrofit.create(ExampleService.class); try { return service.listFeaturedAlbums().execute(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Response<List> listCall) { Log.v("Example", listCall.raw().toSsortingng()); } }.execute(); 

le journal que je reçois est la chose étrange:

V / Exemple ﹕ Réponse {protocole = http / 1.1, code = 404, message = introuvable, url = http://api.exemple.com/album/featured-albums }

Que se passe t-il ici?

Retrofit 2 utilise les mêmes règles qu’un serait.

L’URL de votre URL relative indique à Retrofit qu’il s’agit d’un chemin absolu sur l’hôte. Voici un exemple d’une présentation que j’ai donnée montrant ceci:

entrer la description de l'image ici

Notez l’URL incorrecte qui a été résolue en bas.

En supprimant le leader / , l’URL devient alors relative et se combine avec les segments de chemin faisant partie de l’URL de base. Corrigé dans la présentation, l’URL finale est maintenant correcte:

entrer la description de l'image ici

Dans votre exemple, vous ne disposez pas d’une URL de fin / de base. Vous voudrez probablement en append un pour que les chemins relatifs soient résolus en plus plutôt que comme un frère.