对于我正在使用的服务器,我们将子域和目录绑定在一起。使用Retrofit,您需要指定baseURL,它似乎不允许目录。有没有办法实现这个?
示例:
我试过了:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dev.myserver.com/myserver_dev")
.build();
...
@POST("user/login" )
Call<NewUser> login( @Query( "email" ) String email, @Query( "password" ) String password );
但它总是给我一个404说'#34; Not Found&#34;。如果我这样做似乎只会起作用:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dev.myserver.com")
.build();
...
@POST("server_dev/user/login" )
Call<NewUser> login( @Query( "email" ) String email, @Query( "password" ) String password );
主要是我希望能够快速切换服务器而无需手动编辑两个不同的字段。 (一个用于baseUrl,一个用于目录。)
感谢您的时间。 :)
答案 0 :(得分:1)
看起来改装会忽略baseUrl
的路径组件,除非它以尾部斜杠结尾。
尝试 -
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dev.myserver.com/myserver_dev/")
.build();
顺便说一下,已经存在一个问题 - https://github.com/square/retrofit/issues/1049
答案 1 :(得分:0)
我建议您使用Dynamic Urls or Passing a Full Url
# Example 3 — completely different url
base url: http://futurestud.io/api/
endpoint: https://api.futurestud.io/
Result: https://api.futurestud.io/
# Example 4 — Keep the base url’s scheme
base url: https://futurestud.io/api/
endpoint: //api.futurestud.io/
Result: https://api.futurestud.io/
# Example 5 — Keep the base url’s scheme
base url: http://futurestud.io/api/
endpoint: //api.github.com
Result: http://api.github.com
在您的情况下:
String SCHEME = "https:";
String SERVER_URL= "//{subdomain}.myserver.com/myserver_dev/";
String BASE_URL= SCHEME + BASE_URL;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.build();
@POST(SERVER_URL + "user/login")
Observable<NewUser> createNewUser(@Path("subdomain") String subdomain, @QueryMap HashMap<String, String> params);
致电:
HashMap<String, String> params = new HashMap<>();
params.put("email",email);
params.put("pass",pass);
Observable<NewUser> observable = mApiService.createNewUser("dev",params);