如何通过改造发布数据并以正确的格式获得响应?

Posted

技术标签:

【中文标题】如何通过改造发布数据并以正确的格式获得响应?【英文标题】: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 【参考方案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;

【讨论】:

以上是关于如何通过改造发布数据并以正确的格式获得响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSON 格式解析通过 AFNetworking 1.0 获得的响应

如何通过改造解析 JSON 响应

如何在不使用 GSON 或 android 中的任何其他库的情况下使用改造以字符串形式获得响应 [重复]

改造:如何发出 XML 请求并取回 JSON 响应

如何通过 android 中的改造从 php 中检索“字符串响应”?

如何将此 JSON 格式转换为模型类并使用改造将响应转换为列表