Как включить имя параметра в JSON @Body Retrofit Android - PullRequest
0 голосов
/ 11 июля 2020

Мне нужно позвонить в службу с номера Android. Я тестировал службу с помощью Postman, и она работает, но службы получают один параметр с именем "Parametros", это список ArrayList в формате JSON, он выглядит так введите описание изображения здесь

правильный формат:

{
    "parametros": [
        {
            "Nombre": "@@IdCliente",
            "Valor": "1"
        }
    ]
}

с включенным именем параметра "Parametros". В почтальоне работает нормально.

Но в Android у меня:

interface APIService {

    @POST("/getMovimientos")
    fun getMovimientos(@Body parametros: List<APIParameter>): Call<BalanceVO>
}

и мой запрос выглядит так:

D/OkHttp: --> POST https://xxxxxxx/getMovimientos
    Content-Type: application/json; charset=UTF-8
    Content-Length: 38
D/OkHttp: [{"Nombre":"@@IdCliente","Valor":"1"}]
    --> END POST (38-byte body)

Параметр

[{"Nombre":"@@IdCliente","Valor":"1"}]

должно быть

"parametros":[{"Nombre":"@@IdCliente","Valor":"1"}]

Как я могу настроить приложение, чтобы указать это имя параметра? Спасибо за совет.

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Создайте такой класс данных, назначьте ему список и передайте его как тело

data class ParametrosBody(val parametros: List<APIParameter>)
val parametros = ...//your list
val body = ParametrosBody(parametros)
interface APIService {

    @POST("/getMovimientos")
    fun getSaldo(@Body parametros: ParametrosBody): Call<BalanceVO>
}
1 голос
/ 11 июля 2020

Создайте свое тело как объект класса данных, как показано ниже

data class APIRequestPayload (
    val parametros: List<APIParameter>
)

data class APIParameter (
    val Nombre: String,
    val Valor: String
)

, затем используйте его, как показано ниже, в службе

fun getMovimientos(@Body parametros: APIRequestPayload): Call<BalanceVO>

Чтобы использовать его, передайте тело как obj,

service.getSaldo(parametros=APIRequestPayload(parametros=List<APIParameter>)).enqueue()

По-прежнему присвоение имени val Nombre необычно, вы можете аннотировать @SerializedName("Nombre") val nombre, чтобы придерживаться соглашений об именах переменных при использовании GSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...