改造 - 子域和目录
Retrofit - subdomain and directory
对于我使用的服务器,我们有一个子域和一个目录,它们都绑定在一起。使用 Retrofit,您需要指定 baseURL,它似乎不允许目录。有什么办法可以实现吗?
示例:
- https://dev.myserver.com/myserver_dev/api/user/login...
- https://qa.myserver.com/myserver_qa/api/user/login...
我试过:
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 说法 "Not Found"。它似乎只有在我这样做时才有效:
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,一个用于目录。)
感谢您的宝贵时间。 :)
似乎改造会忽略 baseUrl
的路径部分,除非它以尾部斜杠结尾。
试试——
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dev.myserver.com/myserver_dev/")
.build();
顺便说一下,已经有一个关于此的问题提交了 -- https://github.com/square/retrofit/issues/1049
我建议你使用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);
对于我使用的服务器,我们有一个子域和一个目录,它们都绑定在一起。使用 Retrofit,您需要指定 baseURL,它似乎不允许目录。有什么办法可以实现吗?
示例:
- https://dev.myserver.com/myserver_dev/api/user/login...
- https://qa.myserver.com/myserver_qa/api/user/login...
我试过:
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 说法 "Not Found"。它似乎只有在我这样做时才有效:
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,一个用于目录。)
感谢您的宝贵时间。 :)
似乎改造会忽略 baseUrl
的路径部分,除非它以尾部斜杠结尾。
试试——
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://dev.myserver.com/myserver_dev/")
.build();
顺便说一下,已经有一个关于此的问题提交了 -- https://github.com/square/retrofit/issues/1049
我建议你使用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);