web-dev-qa-db-fra.com

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

C'est le code de l'interface:

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

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

new AsyncTask<Void, Void, Response<List<Album>>>() {

        @Override
        protected Response<List<Album>> 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<Album>> listCall) {
            Log.v("Example", listCall.raw().toString());
        }
    }.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.example.com/album/featured-albums }

Que se passe t-il ici?

108
Ashkan Sarlak

Retrofit 2 utilise les mêmes règles qu'un <a href="">.

Le / Initial 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:

enter image description here

Notez l'URL incorrect qui a été résolu en bas.

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

enter image description here

Dans votre exemple, vous n'avez pas de fin / Sur l'URL de base. Vous voudrez probablement en ajouter un pour que les chemins relatifs soient résolus par dessus, plutôt que comme un frère.

251
Jake Wharton