如何在 JSON @Body Retrofit Android 中包含 "param" 名称

How to include "param" name in JSON @Body Retrofit Android

我需要从 Android 调用服务。 我用 Postman 测试了该服务并且它可以工作,但是该服务接收到一个名为“parametros”的参数,它是一个 JSON 格式的 ArrayList,它看起来像这样

正确的格式是

{
    "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"}]

如何配置我的应用程序以放置此参数名称?

将您的 body 构建为数据 class 的 object,如下所示

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

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

然后在服务中使用它

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

要使用它,请将 body 作为对象传递,

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

仍然命名 val Nombre 不是常规的,如果使用 GSON

,您可以使用 @SerializedName("Nombre") val nombre 注释以坚持变量命名约定

像这样创建数据 class 并为其分配列表并将其作为正文传递

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