当前位置: 首页 > 知识库问答 >
问题:

翻新正文返回空

禄仲渊
2023-03-14

我已经发布了一个请求,并在postman上测试它,响应在postman和android logcat上正确返回,但在改型时,它在正文中返回null

下面是响应的模型

public class DriverResponse implements Serializable{
@SerializedName("errors")
@Expose
public Errors errors;
@SerializedName("driversapi")
@Expose
public Driversapi driversapi;
}


public class Errors implements Serializable {

@SerializedName("driversapi")
@Expose
public List<String> driversapi = null;
}

public class Driversapi implements Serializable{
public String driverid ;
public String status ;
public String authtoken ;
}
public void acceptOrder(String auth, AcceptOrderModel acceptOrderModel) {
    ApiInterface service = ApiClient.getClient().create(ApiInterface.class);
    Call<DriverResponse> connection = service.acceptOrder(auth, acceptOrderModel);
    if (connection != null) {
        connection.enqueue(new Callback<DriverResponse>() {
            @Override
            public void onResponse(Call<DriverResponse> call, Response<DriverResponse> response) {
                String reponseStr = response.toString().replaceAll("\\\\", "");
                Log.e("new String", reponseStr);
                apiResponse.onSuccess(response.body());
            }

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

                Log.e("QR ", " " + t.getLocalizedMessage());
                apiResponse.onFailed(t.getLocalizedMessage());
            }
        });
    }
}


@Headers({"Content-Type: application/json"})
@POST("/api/drivers/driveracceptorder")
Call<DriverResponse> acceptOrder(@Header("Authorization") String Authorization, @Body AcceptOrderModel acceptOrderModel);

当我发送请求时,响应将获得null响应,而errorbody内容将获得以下内容

[size=99 text={\r\n“errors”:{\r\n“driversapi”:[\r\n“order alredy assig…]

下面是预期的json,应该返回并且已经在logcat和postman中返回

{
"errors": {
  "driversapi": [
    "driver not found"
   ]
  }
}

编辑

这是我的猫咪

 POST http://site.example.com/api/drivers/driveracceptorder http/1.1
03-09 10:57:17.533 8128-17940/com.trend.driver D/OkHttp: Content-Type: application/json
03-09 10:57:17.533 8128-17940/com.trend.driver D/OkHttp: Content-Length: 47
03-09 10:57:17.533 8128-17940/com.trend.driver D/OkHttp: Authorization: Ber z3rlF3cUYICZUm49HeCkpOU8TEjITCqq5tplXDZU4pxvRlzTScUo-0wZr52trM9kWinOnqzaJBwgMB9pp0tk4GTx7BGDoX-u5H9IfQWHlJ_iYpWOIkTiZOb4JuovPPPTfta4MJlRJO6IjasBKpNTvT7KRqp4gHrw3xs9JWa9RTCuY83JhaBf2weyQ8RwsT_SVTg
03-09 10:57:17.535 8128-17940/com.trend.driver D/OkHttp: {"accept":"1","driverid":"2112","orderid":"46"}
03-09 10:57:17.535 8128-17940/com.xxxx.driver D/OkHttp: --> END POST (47-byte body)
03-09 10:57:17.535 8128-8128/com.trend.driver I/Choreographer: Skipped 115 frames!  The application may be doing too much work on its main thread.
03-09 10:57:18.290 8128-17940/com.trend.driver D/OkHttp: <-- 404 Not Found http://site.example.com/api/drivers/driveracceptorder (754ms)
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Cache-Control: private
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Content-Length: 99
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Content-Type: application/json
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Server: Microsoft-IIS/8.5
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Set-Cookie: Nop.customer=9df71aba-df96-4aa4-a8f5-daab40d91d5e; expires=Sat, 09-Mar-2019     08:57:18 GMT; path=/; HttpOnly
03-09 10:57:18.291 8128-17940/com.trend.driver D/OkHttp: Date: Fri, 09 Mar 2018 08:57:18 GMT
03-09 10:57:18.294 8128-17940/com.trend.driver D/OkHttp: {
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp:   "errors": {
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp:     "driversapi": [
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp:       "order alredy assigned to other driver"
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp:     ]
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp:   }
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp: }
03-09 10:57:18.295 8128-17940/com.trend.driver D/OkHttp: <-- END HTTP (99-byte body)

共有1个答案

储法
2023-03-14

在OnResponse回调中,您应该检查响应是否成功。如果响应不成功,则响应体将为null,但errorBody将具有内容。下面是一个例子:

Call<ArrayList<Town>> callGetTowns = apiCalls.getTownsInState(stateId);
callGetTowns.enqueue(new Callback<ArrayList<Town>>() {

    @Override
    public void onResponse(Call<ArrayList<Town>> call, Response<ArrayList<Town>> response) {
    if (response.isSuccessful()){
        //response is successful so response.body() won't be null
        ArrayList<Town> towns = response.body();

    }else{
        //response is not successful so response.body is null but response.errorBody is not null
        String message = "Server Error!";
        try {
            String errorBody = response.errorBody().string();

            //parse the errorBody string to json and retrieve whichever attribute you want
            JsonObject jsonObject = gson.fromJson(errorBody, JsonObject.class);
            if (jsonObject!=null && jsonObject.has("message") && !jsonObject.get("message").isJsonNull()) {
                message =  jsonObject.get("message").getAsString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
       }
   }

   @Override
   public void onFailure(Call<ArrayList<Town>> call, Throwable t) {
        //request timedout
   }});
 类似资料:
  • 我使用改型来连接数据库,但GSON似乎没有解析数据。正在返回JSON,但没有创建响应体,因此我无法与数据交互。有什么想法吗? 我的URL添加 okhttp日志

  • 如何在volley中发出JSON请求,我需要在正文中发送一个验证头和JSON对象,并且我只希望得到一个状态代码200的答案 我尝试了使用string或JSON object,object的不同类型的响应侦听器,但总是出现错误:android volley org.JSON.JSONException:在字符0的输入结束 或者volley中是否有其他类型的请求支持json对象和主体中的验证头,并且响

  • 问题内容: 下面是我的代码 我的mongo数据库中已经有一些记录,我想运行此代码来更新年龄为17岁的姓名,然后在代码末尾打印结果。 但是,为什么我仍然从控制台获得相同的结果(而不是修改后的名称),但是当我转到mongo db命令行并键入“ ”时。结果带有修改后的名称。 然后,我再次运行该代码,并修改了结果。 我的问题是:如果修改了数据,那么为什么在console.log时还是第一次获得原始数据。

  • 问题内容: 我想获取更新的文档。这是我的原始代码,它成功更新但没有返回文档。 我使用了toArray函数,但是这给出了错误“没有提供的回调就不能使用writeConcern”: 有任何想法吗? 问题答案: 只会向自己的回调报告受影响的文档数。 要在修改时检索文档,可以改用(以前称为)。 更新:在mongoDB中执行时,请使用;如果使用mongoose,则可以使用。以上是Node.js驱动程序。 注

  • 我必须编写一个程序,其中方法返回读取的正数之和,并将从用户那里读取输入,直到输入零。 到目前为止,我没有计算正数的总和,我需要一些帮助,请。 以下是我目前掌握的情况: (请注意,您得到了扫描程序,不要使用system.in)-从用户读取,直到给定0,并返回读取的正数的和。 示例: ♦用户输入:0=>返回0 ♦用户输入1 2 3 0=>返回6(1+2+3) ♦用户输入1-2 3 0=>返回6(1+3