Как отправить массив объекта с формой URL, закодированной через Retrofit Kotlin? - PullRequest
0 голосов
/ 01 мая 2019

Я хочу отправить URL-адрес формы, закодированный на сервер, но для параметра нужен массив объекта

Я попытался использовать FieldMap из Retrofit и передать данные, но я получил другой ответ, когда попытался с Postman

Параметр необходимо передать

{
  "allowedStatus": "submit",
  "filters": [
    {
      "userId": "2"
    }
  ],
  "page": 1,
  "pageSize": 2
}

Модификация

@FormUrlEncoded
    @POST("ticket/status-list")
    fun getTicketStatusList(
        @Field("allowedStatus") allowedStatus: String,
        @FieldMap filters: HashMap<String, String>,
        @Field("page") page: Int,
        @Field("pageSize") pageSize: Int
    ): Observable<Response<TicketListModel>>

HashMap

val filters = HashMap<String, String>()
        filters["userId"] = "1"
        Log.e("fieldMap", filters.toString())
        getTicketStatusList("monitoring", filters, 1, 5)

Результат, который я получил {}, ответ 200

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Попробуйте следующим образом:

data class Filters(var userId: String = "")

data class MyRequest(

        var allowedStatus: String = "",
        var filters: ArrayList<Filters>? = null,
        var page: Int = 0,
        var pageSize: Int = 0

        )

@POST("ticket/status-list")
fun getTicketStatusList(@Body request: MyRequest): Observable<Response<TicketListModel>>
0 голосов
/ 01 мая 2019

Пожалуйста, попробуйте так:

val filters = HashMap<String, RequestBody>()
filters.put("userId", toRequestBody("2"))
getTicketStatusList("monitoring", filters, 1, 5)

Также измените хэш-карту "String" на "RequestBody"

@FormUrlEncoded
    @POST("ticket/status-list")
    fun getTicketStatusList(
        @Field("allowedStatus") allowedStatus: String,
        @FieldMap filters: HashMap<String, RequestBody>,
        @Field("page") page: Int,
        @Field("pageSize") pageSize: Int
    ): Observable<Response<TicketListModel>>

Метод ниже преобразует String в RequestBody

fun toRequestBody(value: String): RequestBody {
        return RequestBody.create(MediaType.parse("text/plain"), value)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...