改造 - 子域和目录

时间:2015-10-12 01:01:10

标签: android networking retrofit

对于我正在使用的服务器,我们将子域和目录绑定在一起。使用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,一个用于目录。)

感谢您的时间。 :)

2 个答案:

答案 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);