頭のメモリが少ない

プログラミングと日々の生活

【Retrofit2】baseUrlでhostnameより後のパスが削られる

地味にハマったので残しておきます。
Retrofit.BuilderのbaseUrlに"http://xxx.xxxx.xxxx/yyy/“と設定したのにもかかわらず、 APIを叩く時にhostより後ろのpath部分が落ちてしまい"http://xxx.xxx.xxx/hoge"となってしまう場合があります。

これは、HTTP APIJava Interfaceの定義ミスでした。
問題の書き方はこれ

public interface GitHubService {
  @GET("/users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

これだとURLはhttp://xxx.xxxx.xxxx/users/{user}/reposこうなる。

これならおk。

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

これでURLがhttp://xxx.xxxx.xxxx/yyy/users/{user}/reposこうなります。

@GET(/users/...)@GET(users/...)の違いです。
前者の場合はhostNameからの絶対Pathとして解釈され、後者の場合は相対パスとして解釈されbaseUrlと結合出来ます。
適当なところからコピペするからこうなる…(戒めっ)

参考

stackoverflow.com