【问题标题】:Retrofit - subdomain and directory改造 - 子域和目录
【发布时间】:2015-10-12 01:01:09
【问题描述】:

对于我正在使用的服务器,我们有一个子域和一个目录,它们都绑定在一起。使用 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 说“未找到”。它似乎只有在我这样做时才有效:

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,一个用于目录。)

感谢您的宝贵时间。 :)

【问题讨论】:

    标签: android networking retrofit


    【解决方案1】:

    似乎改造忽略了baseUrl 的路径组件,除非它以斜杠结尾。

    试试——

    Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://dev.myserver.com/myserver_dev/")
                .build();
    

    顺便说一句,这已经有一个问题提交了——https://github.com/square/retrofit/issues/1049

    【讨论】:

      【解决方案2】:

      我建议你使用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);
      

      【讨论】:

        猜你喜欢
        • 2014-05-17
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多