Retrofit 2从主URL删除主机名后的字符

时间:2015-09-02 11:39:48

标签: android retrofit

我正在使用Retrofit来访问RESTful api。基本网址是:

  

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 /示例:响应{protocol = http / 1.1,代码= 404,消息=未找到,网址= http://api.example.com/album/featured-albums}

这里发生了什么?

1 个答案:

答案 0 :(得分:244)

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

相对URL上的前导/告诉Retrofit它是主机上的绝对路径。以下是我给出的演示文稿中的一个示例:

enter image description here

请注意底部已解决的错误网址。

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

enter image description here

在您的示例中,基本URL上没有尾随/。您可能想要添加一个,以便在它之上解析相对路径而不是它的兄弟。