改造2从基 URL 删除主机名后面的字符

我正在使用 Requfit 来访问一个 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();

我得到的日志很奇怪:

示例: 响应{ protocol = http/1.1,code = 404,message = Not Found,url = http://api.example.com/album/featured-albums}

这是怎么回事?

29146 次浏览

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

您的相对 URL 上的前导 /告诉 Requfit 它是主机上的绝对路径。下面是我演讲中的一个例子:

enter image description here

注意在底部解析的不正确的 URL。

通过删除前导 /,URL 就变成了相对的,并将与作为基 URL 一部分的路径段组合在一起。在演示文稿中更正了最终的 URL 现在是正确的:

enter image description here

在您的示例中,在基 URL 上没有尾随的 /。您可能希望添加一个,这样相对路径就可以在它的上面解析,而不是作为它的兄弟。