我已经发布了一个请求,并在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)
在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