Retrofit 2从基本url中删除主机名后面的字符

我正在使用Retrofit来访问一个RESTful api。 基地的url是:

http://api.example.com/service

这是接口的代码:

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

这就是我发送请求和接收响应的方式:

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

我得到的日志是奇怪的事情:

V / Example:Response {protocol = http / 1.1,code = 404,message = Not Found,url = http://api.example.com/album/featured-albums }

这里发生了什么?

改造2使用与<a href="">会相同的规则。

您的相对URL前导/指示Retrofit它是主机上的绝对path。 下面是我给出的一个演示示例:

在这里输入图像说明

请注意在底部已解决的错误url。

通过删除前导/ ,这个URL就变成了相对的,并且和基本URL的一部分path段相结合。 在演示中更正了最终的URL现在是正确的:

在这里输入图像说明

在你的例子中,你没有在基地url后面。 你可能想要添加一个,以便相对path在它上面解决,而不是作为它的兄弟。