如何使用android中的改造界面在Post请求中附加我的URL

时间:2017-12-11 12:45:18

标签: retrofit2

我想在改造界面中添加或追加我的网址。接口代码如下。

public interface PostInterface {
    @POST("api/v1/app/user/resetpassword/token")
    @Headers({
            "Content-Type: application/json"
    })

    Call<JsonObject> getResult(@Body JsonObject body);
}

在给定的网址@POST(&#34; api / v1 / wallet / user / resetpassword / 令牌&#34;)中我想追加令牌值。这是变量的值一项活动。

我的活动代码在下面给出了我称之为方法的地方。

try {
        JsonObject params = new JsonObject();
        params.addProperty("email", email);
        params.addProperty("signup_mode", "mobile");
        PostInterface apiService =TestApiClient.getClient(this).create(PostInterface.class);
        Call call = apiService.getResult(params);

        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {

2 个答案:

答案 0 :(得分:7)

我不完全确定我是否理解这是否应该是路径的一部分或查询参数的一部分,所以这里有两种方式。

路径的一部分

通过改造来实现这一目标的方法是使其成为变量&#34;在路径中并将其作为参数传递给函数。

@POST("api/v1/app/user/resetpassword/{token}")
@Headers({
        "Content-Type: application/json"
})
Call<JsonObject> getResult(
       @Path("token") String token,
       @Body JsonObject body);

注意网址中{token}中的花括号。这告诉我们应该将你的方法的参数格式化为url。要知道哪个参数使用注释Path,其名称与正在格式化的注释相同。这导致像api/v1/app/user/resetpassword/09df7seh98ghs这样的网址(09df7seh98ghs是我对令牌的不良表示)。

(这假设您的令牌是一个字符串.Retrofit支持更多。)

部分查询参数

与使用@Path注释执行此操作的方式类似,您可以使用@Query注释:

@POST("api/v1/app/user/resetpassword/token")
@Headers({
        "Content-Type: application/json"
})
Call<JsonObject> getResult(
       @Query("token") String token,
       @Body JsonObject body);

这里的不同之处在于,改装会将给定的令牌添加为查询参数,从而产生api/v1/app/user/resetpassword/token?token=...等网址

答案 1 :(得分:0)

嘿,我得到了我的问题的答案。希望如果有任何身体出现这样的问题,它将来会有所帮助。

界面修改:

 @POST
    @Headers({"Content-Type: application/json"})
    Call<JsonObject> getResult(@Url String url, @Body JsonObject body);

现在,在您的活动回调中,请执行以下更改

try {
        JsonObject params = new JsonObject();
        params.addProperty("email", email);
        params.addProperty("signup_mode", "mobile");

   String url= Constants.BASE_URL+"api/v1/wallet/user/changepassword/"+userIdStr;

            PostInterface apiService = TestApiClient.getClient(this).create(PostInterface.class);
            Call call = apiService.getChangePassword(url,params);
            call.enqueue(new Callback() {

工作正常。