Модифицированные запросы FormUrlEncoded не работают с массивом объектов в качестве поля - PullRequest
0 голосов
/ 29 августа 2018

Ребята, у меня есть API, который принимает входные данные в виде

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

и я написал Retrofit Service как

@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>

Почему то же самое отказывается работать со списком в качестве параметра .. ??

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Поскольку я не мог найти правильное решение. Я продолжил использовать его, преобразовав модель в строку, используя Gson.

@FormUrlEncoded
@POST("login")
fun login(  @Field("login") data:String): Call<Any>
0 голосов
/ 29 августа 2018

Попробуйте использовать это и отправьте массив LoginModel :

 @FormUrlEncoded
        @POST("login")
        fun login(  @Field("login") LoginModel[]): Call<Any>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...