【问题标题】:Retrofit FormUrlEncoded requests not working with Array of objects as Field改造 FormUrlEncoded 请求不使用对象数组作为字段
【发布时间】:2018-08-29 09:57:19
【问题描述】:

伙计们,我有一个接受表单输入的 api

[{"username":"usr","password":"123456","userflag":"1"}]

我写了一个改造服务

@FormUrlEncoded
    @POST("login")
    fun login(  @Field("login") List<LoginModel>): Call<Any>

LoginModel 是

data class LoginModel(
        @SerializedName("username") var username:String,
        @SerializedName("password") var password:String,
        @SerializedName("userflag") var userflag:String
        )

当我通过将参数作为列表传递来调用 api 时 服务器给出 500 错误,因为它不会接收参数。

但是当我使用 JsonArray 而不是 List as

时,同样的事情也有效
json.addProperty("username", loginModel.username)
        json.addProperty("userflag", loginModel.userflag)
        json.addProperty("password", loginModel.password)

        var jarray = JsonArray()
        jarray.add(json)

    var call: Call<Any> = GetDataService.create().login(jarray.toString())

随着

@FormUrlEncoded
@POST("login")
fun login(  @Field("login") data:String): Call<Any>

为什么同样拒绝使用 List 作为参数..??

【问题讨论】:

  • 应该是@Field而不是@Body
  • 密钥“login”应该被传递。“login”:[{"username":"usr","password":"123456","userflag":"1"}] 是要求。 @Body 不接受密钥

标签: android kotlin retrofit


【解决方案1】:

尝试使用它并发送 LoginModel 数组:

 @FormUrlEncoded
        @POST("login")
        fun login(  @Field("login") LoginModel[]): Call<Any>

【讨论】:

  • 对不起兄弟。它看起来像一个语法错误。传递 LoginModel[ ] 显示错误
【解决方案2】:

因为我找不到合适的解决方案。我继续使用它,使用 Gson 将模型转换为字符串。

@FormUrlEncoded
@POST("login")
fun login(  @Field("login") data:String): Call<Any>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2018-02-26
    • 2016-11-22
    • 2016-09-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多