如何在正文中传递api参数而不是@Query标签android kotlin改造
Posted
技术标签:
【中文标题】如何在正文中传递api参数而不是@Query标签android kotlin改造【英文标题】:how can pass api parameter in body instead @Query tag android kotlin retrofit 【发布时间】:2022-01-12 09:43:56 【问题描述】:如何在body中传递api参数而不是@Query标签 android kotlin 改造
我想在 body 中传递参数而不是 api @Query
我的api接口
@Multipart
@POST("add_passport.php")
suspend fun addPassport(
@Part image: MultipartBody.Part?,
@Query("userid") userid: String,
@Query("fistname") fistname: String,
@Query("surname") surname: String,
@Query("nationality") nationality: String,
@Query("dof") dof: String,
@Query("gender") gender: String,
@Query("age") age: String,
@Query("sig") sig: String,
@Query("salt") salt: String
):Response<PassportInsertApiClass>
存储库类
suspend fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,
gender:String, dof:String,age:String,sig:String,salt:String):Response<PassportInsertApiClass>
return RetrofitInstance.api.addPassport(image, userid,fistname,surname,nationality,gender,dof,age,sig,salt)
查看模型
fun addPassport(image: MultipartBody.Part?, userid: String,fistname:String,surname:String,nationality:String,
dof:String,gender:String,age:String,sig:String,salt:String):
MutableLiveData<Response<PassportInsertApiClass>>
val addPassport = MutableLiveData<Response<PassportInsertApiClass>>()
viewModelScope.launch
addPassport.postValue(repository.addPassport(image, userid, fistname, surname, nationality, dof, gender, age, sig, salt))
return addPassport
片段/活动
settingViewModel.addPassport(body,userId,fistname,surname,nationality,dof,gender,age,sig1,salt1).observe(this, response ->
if (response.isSuccessful)
if (response.body()?.status == 1 )
Toast.makeText(context, "passport update", Toast.LENGTH_SHORT).show()
else
Toast.makeText(context, "something went wrong", Toast.LENGTH_SHORT).show()
binding.progress.isVisible = false
)
【问题讨论】:
【参考方案1】:您不能在 Multipart 类型的 api 调用中将整个数据类作为 @body 传递,您可以像这样使用它
@Multipart
@POST("v1/society")
fun createSociety(
@Header("Authorization") authorization: String?,
@Part profile_photo: MultipartBody.Part?,
@Part("name") name: RequestBody
): Call<EntrepreneurialSocietyCreatedResponse>
这就是您可以将数据作为 Body 传递的方式,在 Api 中传递名称之前,您必须像这样将其转换为 ReqeustBody
societyName.toRequestBody("text/plain".toMediaTypeOrNull())
【讨论】:
以上是关于如何在正文中传递api参数而不是@Query标签android kotlin改造的主要内容,如果未能解决你的问题,请参考以下文章
RESTful API:在请求正文中而不是在 URI 中传递父资源定位器是不是更实用?
将 Swagger 与 Django Rest Framework 一起使用,我可以在不同字段而不是一个正文中看到 POST 参数吗