改造FormUrlEncoded请求不适用于对象数组作为字段

时间:2018-08-29 09:57:20

标签: android kotlin retrofit

伙计们,我有一个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 <>作为

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作为参数。?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

由于我找不到合适的解决方案。我继续通过使用Gson将模型转换为字符串来使用它。

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