用空数组改造 POST

Retrofit POST with empty array

我需要发送一个带有 Retrofit 的 POST:

Retrofit.Builder()
  .baseUrl(API_BASE_URL)
  .addConverterFactory(
      GsonConverterFactory.create(
          GsonBuilder().serializeNulls().create()
      ))
  .client(okHttpClient)
  .build()

    @POST(endpoint)
    @FormUrlEncoded
    fun partialPickupsDelivery(
            @HeaderMap headers: Map<String, String>,
            @Field("userId") userId: String,
            @Field("purchaseIds[]") purchases: ArrayList<String>
    ): Call<ResponseBody>

服务器正在等待这样的事情: purchaseIds=["1234", "2345", "3456"]

当我尝试发送一个空数组(非空)时出现问题,因为服务器正在等待: purchaseIds=[] 但是我只发送第一个参数 userId(我认为改造是删除第二个参数,因为数组是空的)。

有什么方法可以发送purchaseIds=[]

感谢

您可以使用 List 而不是 ArrayList

我终于找到了适合我的解决方案:

@POST(endpoint)
fun partialPickupsDelivery(
   @HeaderMap headers: Map<String, String>,
   @Body params: HashMap<String, Any>
): Call<ResponseBody?>

其中 params 是:

val params = HashMap<String, Any>().apply {
    this["purchaseIds"] = destinationsId
    this["userId"] = deliverId
}

它是这样称呼的:

val call: Call<ResponseBody> =
      service.partialPickupsDelivery(
          headers,
          params
      )

希望对大家有所帮助