android retrofit

android - Retrofit 2 elimina caracteres después del nombre de host de la url base



retrofit dynamic url android (1)

Estoy usando Retrofit para acceder a una API RESTful. La url base es:

http://api.example.com/service

Este es el código para la interfaz:

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

y así es como envío la solicitud y recibo la respuesta:

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

el registro que obtengo es lo extraño:

V / Ejemplo ﹕ Respuesta {protocolo = http / 1.1, código = 404, mensaje = No encontrado, url = http://api.example.com/album/featured-albums }

¿Que está pasando aqui?


La actualización 2 usa las mismas reglas que un <a href=""> .

El inicio / en su URL relativa le dice a Retrofit que es una ruta absoluta en el host. Aquí hay un ejemplo de una presentación que di mostrando esto:

Tenga en cuenta la URL incorrecta que se resolvió en la parte inferior.

Al eliminar el / inicial, la URL se vuelve relativa y se combinará con los segmentos de ruta que forman parte de la URL base. Corregido en la presentación, la URL final ahora es correcta:

En su ejemplo, no tiene un seguimiento / en la URL base. Probablemente desee agregar uno para que las rutas relativas se resuelvan encima de él en lugar de ser un hermano.