【问题标题】:Response from Patch request using retrofit使用改造的补丁请求响应
【发布时间】:2018-03-23 07:37:31
【问题描述】:

我第一次尝试补丁请求将 id 发送到服务器进行更改,api 应该像这样发送给我

{ “结果”:“成功”, “标志”:“TKT_INVALID” }

但我得到的回应是

响应{protocol=http/1.1, code=200, message=OK, url=http://********.com/brosis/ticket/1791498663}

我在这里做的是像 GET 请求一样使用 PATCH,因为我还没有找到任何关于它的资源。 谁能指出我正确的方向

界面

@PATCH("ticket/{ticketId}/")
    Call<ResponseBody> getTicketVerified(@Body String empty,@Path("ticketId") String ticketId);

并像这样称呼它

cdsService.getTicketVerified(" ",ticketNo).enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Log.v("TAGGGEw",response.toString());

                if(response.isSuccessful()) {

                    Log.d("TAGGGE", "posts loaded from API");
                    view.ticketVerified();
                }else {
                    int statusCode  = response.code();
                    view.HandleError(0);
                    Log.v("SplashScreenPresenter","Handling Server error");


                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {


                if(t instanceof IOException){
                    t.printStackTrace();
                    Log.v("TAGGGE","this is ioException");
                    view.HandleError(1);
                    Log.v("SplashScreenPresenter","Handling Network Error");
                }

            }
        });

【问题讨论】:

  • response.body() 给出你的回应
  • ResponseBody 的分享代码
  • 试试这个Log.v("TAGGGEw",response.body().string());
  • @Navneetヅ 它只是 OkHttp3 提供的一个简单的响应
  • @DilipPoudel 尝试使用我在下面的回答中提到的模型类

标签: android httprequest retrofit2


【解决方案1】:

替换这一行:

Log.v("TAGGGEw",response.toString());

作者:

Log.v("TAGGGEw",new Gson().toJson(response.body()));

【讨论】:

  • 那么我得到的是:okhttp3.ResponseBody$1@425461a8
【解决方案2】:

使用这个模型类而不是 ResponseBody 来获取响应

    public class ExampleJson {

@SerializedName("result")
@Expose
private String result;
@SerializedName("flag")
@Expose
private String flag;

public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}

public String getFlag() {
return flag;
}

public void setFlag(String flag) {
this.flag = flag;
}

}

界面

@PATCH("ticket/{ticketId}/")
Call<ExampleJson> getTicketVerified(@Body String empty,@Path("ticketId") String ticketId);

改装电话

cdsService.getTicketVerified(" ",ticketNo).enqueue(new Callback<ExampleJson>() {
        @Override
        public void onResponse(Call<ExampleJson> call, Response<ExampleJson> response) {
            Log.v("TAGGGEw",response.body().toString());

            if(response.isSuccessful()) {

                Log.d("TAGGGE", "posts loaded from API");
                view.ticketVerified();
            }else {
                int statusCode  = response.code();
                view.HandleError(0);
                Log.v("SplashScreenPresenter","Handling Server error");


            }
        }

        @Override
        public void onFailure(Call<ExampleJson> call, Throwable t) {


            if(t instanceof IOException){
                t.printStackTrace();
                Log.v("TAGGGE","this is ioException");
                view.HandleError(1);
                Log.v("SplashScreenPresenter","Handling Network Error");
            }

        }
    });

【讨论】:

  • 我已经多次使用 Responsebody .. 使用 PATCH 是我认为的真正问题。因为响应的主体不包含任何 PATCH 情况
  • 既然你有code=200, message=OK,你的补丁请求按预期工作,问题应该是你返回的响应
  • @DilipPoudel 还检查了response.raw().body()的输出
  • 感谢您抽出宝贵的时间。我认为api有问题
猜你喜欢
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 2014-07-29
  • 2021-10-31
  • 1970-01-01
  • 2014-04-20
  • 2013-11-16
  • 1970-01-01
相关资源
最近更新 更多