Android端如何使用Retrofit2向服务器POST请求参数?
Retrofit2 POST请求带查询参数与请求体的正确实现
你的代码问题在于没有处理URL中的查询参数iname,同时需要确保请求的基础URL和参数拼接逻辑正确。以下是修正后的实现:
1. 修正接口定义
在接口方法中添加@Query注解来处理URL末尾的iname参数,同时保留@Body传递POST请求体(比如文件数据):
interface ModelApi { @POST("/image") suspend fun pushImageToModelFromAPI( @Query("iname") iname: String, @Body file: RequestBody ) }
@Query("iname")会自动将用户输入的VAR值拼接到URL中,最终形成你预期的https://192.168.1.1/image?iname=VAR格式@Body负责传递POST请求的主体内容(比如你要上传的文件)
2. 构建文件RequestBody(以上传图片为例)
如果是上传图片文件,可通过以下方式构建RequestBody:
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody.Companion.asRequestBody // 假设file是你要上传的图片文件对象 val fileRequestBody = file.asRequestBody("image/*".toMediaTypeOrNull())
3. 初始化Retrofit并调用接口
确保Retrofit初始化时的baseUrl设置正确:
val retrofit = Retrofit.Builder() .baseUrl("https://192.168.1.1/") .addConverterFactory(GsonConverterFactory.create()) .build() val modelApi = retrofit.create(ModelApi::class.java) // 调用接口,userInput是用户输入的VAR值 modelApi.pushImageToModelFromAPI(userInput, fileRequestBody)
内容的提问来源于stack exchange,提问作者Ahmed Maher
相关产品推荐
相关产品推荐

