【问题标题】:Retrofit POST request - parsing two JSON Objects having same name改造 POST 请求 - 解析两个具有相同名称的 JSON 对象
【发布时间】:2018-05-15 12:00:18
【问题描述】:

我正在使用改造将数据上传到 Web 服务,并且我正在相应地从 Web 服务获得响应。上传数据的结构如下。

并且响应包含以下结构。

如您所见,上传数据和响应都包含data 命名对象。所以,我的问题是如何制作模型类来处理这个请求和响应 data 对象?

我按照以下方式进行操作,但它给出了multiple fields having same name 的错误。

data class PostDataModel(var data: PostDataFieldsModel,var status: String, var message: String,
                     @SerializedName("data") var data1: PostResponseDataFieldsModel)

任何帮助将不胜感激。

【问题讨论】:

  • 您应该为请求制作一种模型,为响应制作另一种模型
  • 是的,我也这么认为。我已经这样做了,然后我不明白如何使用 Retrofit 在 POST 请求中传递这两个。请问您可以提供任何示例或任何有用的链接吗? @LeviAlbuquerque
  • @JaydipKalkani 您应该让您的数据模型将请求表示为参数,而响应将嵌入到返回类型中(例如,如果您使用普通改造,则在 Call 对象中)
  • @JaydipKalkani 查看答案,希望对您有所帮助

标签: android json post kotlin retrofit


【解决方案1】:

您应该为每个响应和请求创建一个模型 POJO。例如,您可能在改造中有以下端点:

@Headers({"Content-Type: application/json", "Accept: application/json"})
@POST("/login")
Call<Response<LoginResponse>> login(
        @Body LoginRequest request);

LoginRequest.java

public class LoginRequest {
    DataModel data;

//getters and setters

}

LoginResponse.java

public class LoginResponse {

   Integer status;
   String message;
   SecondDataModel data;

  //getters and setters
}

DataModel 类应该对请求中的数据字段进行建模。你的SecondDataModel 应该在响应中建模。如果它们的数据相同,则可以使用相同的 POJO。

【讨论】:

  • +1 以获得清晰的解释。我已根据您的建议更改了代码。现在,我的错误消失了,但我的 Web 服务返回了一些错误。一旦我确保我从网络服务获得正确的响应,我就会将此答案标记为已接受。
  • 我正在使用 POSTMAN 测试我的 Web 服务,它返回正确的响应,但是当我使用 android 发布相同的数据时,我的 Web 服务返回 Please pass the language type 作为错误消息,但我已正确传递语言类型。所以,我必须弄清楚他们在发布数据时是一个错误,或者是在其他地方。如果您能给我任何提示,那就太好了。
  • 也许您的 api 要求您添加“Accept-Language”标头。在端点的@Header 集合中添加“Accept-Language”、“Your value”
  • 没有。我的 api 不需要任何“Accept-Language”标头。我可以肯定地说,因为在 POSTMAN 中我没有传递任何标题。
  • 我得到了答案。它应该包含模型类类型的data 对象,其中包含我的所有登录字段数据。非常感谢您的出色回答。你拯救了我的一天。自从过去 2 天以来,我一直在面对它。非常感谢。
猜你喜欢
  • 2018-02-26
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多