Kotlin中将Retrofit2 POST请求的Query参数改为Body参数问题
Retrofit2 POST请求从Query参数改为Body参数修改指南
第一步:完善请求实体类User
你现有的User类未声明构造参数为类成员,无法被序列化框架读取内容,修改为可序列化的data class:
data class User( val email: String, val password: String )
第二步:修改Retrofit接口定义
将原有@Query参数替换为@Body注解标注的User类型参数:
import retrofit2.Call import retrofit2.http.* interface PostInterface { @POST("signin") fun signIn(@Body user: User): Call<String> }
第三步:修改Repo层调用逻辑
调用signIn方法时传入构造好的User实例即可,原有回调逻辑无需修改,同时补齐原有代码缺失的必写方法和返回值避免编译错误:
class BasicRepo @Inject constructor(val postInterface: PostInterface) { fun signIn(email: String, password: String): MutableLiveData<Resource> { val status: MutableLiveData<Resource> = MutableLiveData() status.value = Resource.loading(null) // 传入构造的User对象代替原有两个字符串参数 postInterface.signIn(User(email, password)).enqueue(object : Callback<String> { override fun onResponse(call: Call<String>, response: Response<String>) { if (response.code() == 200 || response.code() == 201) { // 原有逻辑保持不变 } else { // 原有逻辑保持不变 } } // 原有代码缺失onFailure重写,必须补充否则会报语法错误 override fun onFailure(call: Call<String>, t: Throwable) { status.value = Resource.error(t.message ?: "请求失败", null) } }) // 原有代码缺失返回值,补充后避免语法错误 return status } }
注意事项
- 初始化Retrofit时必须添加JSON序列化转换器,比如Gson转换器:
addConverterFactory(GsonConverterFactory.create()),否则无法将User对象自动序列化为JSON请求体。 - 若后端接口要求接收表单格式的请求体,需要改用
@FormUrlEncoded+@Field的写法,和当前JSON Body逻辑不同。
内容的提问来源于stack exchange,提问作者14079_Z
相关产品推荐
相关产品推荐

