【Retrofit2】baseUrlでhostnameより後のパスが削られる
地味にハマったので残しておきます。
Retrofit.BuilderのbaseUrlに"http://xxx.xxxx.xxxx/yyy/“と設定したのにもかかわらず、
APIを叩く時にhostより後ろのpath部分が落ちてしまい"http://xxx.xxx.xxx/hoge"となってしまう場合があります。
これは、HTTP APIのJava 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と結合出来ます。
適当なところからコピペするからこうなる…(戒めっ)