【问题标题】:Sending 2 Object Model as an input to @body retrofit发送 2 个对象模型作为 @body 改造的输入
【发布时间】:2020-02-12 17:41:38
【问题描述】:

您好,我想发送 2 个对象而不创建新的 api 模型。

例如,我有一个名为 User 的类和另一个名为 Device 的类。

我想结合这两个模型并将其作为请求正文发送。

Retrofit Post 请求将如下所示:

@POST("/login")
fun loginAPI(@Body user: UserModel, @Body device : DeviceModel): Observer<CallbackModel>

最终的 JSON 也会是这样的:

"user" : {
   "username" : "XXX"
   ...
}
"device" : {
   "imei" : "XXX"
   ...
}

记住:我知道我可以创建一个包含用户和设备属性等的新类。问题是我不喜欢为每个端点创建一个新类。 p>

【问题讨论】:

  • 你能修改你的端点吗?如果是,您可以将所有这些混合在一个 json 中

标签: android kotlin retrofit retrofit2


【解决方案1】:

Retrofit 不允许在单个请求中发送多个主体对象,因为它包含 POST 请求的消息主体。因此,作为替代解决方案,您可以将两个模型都传递到 hashmap 主体中,如下所示:

API 接口

@POST("/login")
fun loginAPI(@Body map: HashMap): Observer<CallbackModel>

调用类

val map = HashMap<String, Object>()
map.put("user", userModel)
map.put("device", deviceModel)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    你可以像下面这样创建你的对象:

    JSONObject parent = new JSONObject();
    
    JSONObject user = new JSONObject();
    user.put("key", "value");
    ...
    
    JSONObject device = new JSONObject();
    device.put("key", "value");
    ...
    
    parent.put("user", user);
    parent.put("device", device);
    

    【讨论】:

    • 我不想传递 JSONObject,实际上我想同时传递用户和设备模型作为改造后请求接口的输入
    • @SinaMirshafiei 有 2 条建议给你:1)发送用户和设备查询参数,这样你就不需要创建和发送任何 json 对象。 2)如果您想将数据作为正文发送,则必须将它们组合在一个json中,因为此处的正文表示HTML POST的消息正文,您只能将一个参数作为正文传递。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2018-11-13
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多