【问题标题】:How to POST data with retrofit and get the response in proper format?如何通过改造发布数据并以正确的格式获得响应?
【发布时间】:2019-06-15 18:21:01
【问题描述】:

我遇到了异常

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 1 path $

当调用 POST 请求时。

根据this 的回答,我的 json 响应确实有花括号 {}。

首先我的 json 响应是-

{
    "status": {
        "status": "1",
        "message": "Entry inserted successfully"
    },
    "data": {
        "date": "24-Mar-2226",
        "month": "March",
        "party_name": "mark"
    }
}

然后我将两个单独的对象组合在一个响应对象中-

{
   "response": {
       "status": {
           "status": "1",
           "message": "Entry inserted successfully"
       },
       "data": {
           "date": "24-Mar-2226",
           "month": "March",
           "party_name": "mark"
       }
   }
}

但我仍然遇到同样的错误。

带有改造的 GET 请求工作正常,但不是 POST 请求。

这是我的 POST 查询-

  @POST("AddEntry")
    Call<ResponseClass> addMyEntry(@Body DetailsClass details);

【问题讨论】:

  • 我在问题中添加了邮递员的 json 响应
  • sry 我想看看您在详细信息中发送的内容记录该详细信息
  • 请贴出响应的代码
  • 对不起,我不明白你想要什么@Ashish

标签: android json post retrofit


【解决方案1】:

异常表示您使用 String 类型标记的属性,但在 JSON 中它是一个对象。

使用 JSON 是:

{
   "response": {
       "status": {
           "status": "1",
           "message": "Entry inserted successfully"
       },
       "data": {
           "date": "24-Mar-2226",
           "month": "March",
           "party_name": "mark"
       }
   }
}

你应该有一些类如下:

public class Response {
 @SerializedName("status")
 public Status status;

 @SerializedName("data")
 public Data data;
}

public class Status {
 @SerializedName("status")
 public String status;

 @SerializedName("message")
 public String message;
}

public class Data {
 @SerializedName("date")
 public String date;

 @SerializedName("month")
 public String month;

 @SerializedName("party_name")
 public String party_name;
}

【讨论】:

  • 我确实有相同的课程
  • 我尝试过清理和重建项目以及使缓存无效/重新启动,但没有奏效。
【解决方案2】:

请使用下面的类结构。

这个问题对于大多数只了解结构并继续前进的开发人员来说很常见。

public class ResponseData {
 @SerializedName("response")
  public Response response;
 }

  public class Response {
 @SerializedName("status")
 public Status status;

 @SerializedName("data")
 public Data data;
}

public class Status {
 @SerializedName("status")
 public String status;

 @SerializedName("message")
 public String message;
}

public class Data {
 @SerializedName("date")
 public String date;

 @SerializedName("month")
 public String month;

 @SerializedName("party_name")
 public String party_name;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    相关资源
    最近更新 更多