所以我希望向我们的api请求登录用户,但是有一个部分在Retrofit 2方法中编码,即使它设置为encoded = true
。基本网址为https://testapi.test.ie
我作为serverext
传递的参数为mdc.php?action=
但是,即使设置encoded = true
后,生成的请求正文为:https://testapi.test.ie/mdc.php%3Faction=login_user&ts=1482924232742
我需要它成为:https://testapi.test.ie/mdc.php?action=login_user&ts=1482924232742
所以我可以看到问题是?
符号。以下是我的改造方法,如果有人可以帮助我,我会很感激它,以实现正确的
@retrofit2.http.POST("/{serverext}login_user&ts={timestamp}")
@retrofit2.http.Multipart
Call<LoginResponseModel> loginUser(@retrofit2.http.Path(value = "serverext", encoded = true) String server,
@retrofit2.http.Part(Constants.USER) String username,
@retrofit2.http.Part(Constants.PASS) String password,
@retrofit2.http.Path("timestamp") Long timestamp);
答案 0 :(得分:2)
你使用它不正确。路径是路径,查询是查询。您需要重写代码才能单独使用它。
@retrofit2.http.POST("{serverext}")
@FormUrlEncoded
Call<LoginResponseModel> loginUser(@retrofit2.http.Path(value = "serverext", encoded = true) String server,
@retrofit2.http.Field(Constants.USER) String username,
@retrofit2.http.Field(Constants.PASS) String password,
@retrofit2.http.Query("timestamp") Long timestamp,
@retrofit2.http.Query("action") String action);
loginUser("mdc.php", username, pass, 42, "login_user")
答案 1 :(得分:0)
您需要使用@FormUrlEncoded
。并且您不需要在所有声明中包含包名称!只需导入它们!它更整洁干净!
@POST("/{serverext}login_user&ts={timestamp}")
@Multipart
@FormUrlEncoded
Call<LoginResponseModel> loginUser(@Path(value = "server", encoded = true) String server,
@Part(SyncStateContract.Constants.USER) String username,
@Part(SyncStateContract.Constants.PASS) String password,
@Path("timestamp") Long timestamp);