You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit POST带请求体无响应体登录接口实现报错求助

问题分析与解决方法

你遇到的问题核心是请求参数的传递方式不匹配:Postman里你是把JSON放在请求体(Raw)里提交,但Android代码里用了@Query注解,这会把参数拼在URL的查询字符串里,和后端期望的接收方式不一致,所以才会触发onFailure。

下面是具体的修正步骤和代码:

1. 创建请求数据类

首先定义一个和后端JSON结构对应的Kotlin数据类,方便Retrofit把它序列化成JSON:

data class LoginRequest(
    val userLogin: String,
    val userPassword: String
)

2. 修改LoginService接口

把原来的@Query换成@Body注解,这样Retrofit会把数据类对象转换成JSON放在POST请求体里,和你在Postman里的操作一致:

interface LoginService {
    @POST("login")
    fun userLogin(@Body loginRequest: LoginRequest): Call<Void>
}

3. 调整Retrofit调用代码

在调用接口时,创建LoginRequest对象并传入:

fun checkLoginData() {
    val retrofit = Retrofit.Builder()
        .baseUrl("myurl...") // 替换为你的实际基础URL
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    val service = retrofit.create(LoginService::class.java)
    val loginRequest = LoginRequest("Mark", "Pencil")
    val call = service.userLogin(loginRequest)

    call.enqueue(object : Callback<Void> {
        override fun onResponse(call: Call<Void>, response: Response<Void>) {
            // 用isSuccessful判断更稳妥,涵盖所有2xx成功状态码
            if (response.isSuccessful) {
                Toast.makeText(applicationContext, "Logged in", Toast.LENGTH_SHORT).show()
            } else {
                // 非成功状态可以提示具体码,方便排查
                Toast.makeText(applicationContext, "Login failed: ${response.code()}", Toast.LENGTH_SHORT).show()
            }
        }

        override fun onFailure(call: Call<Void>, t: Throwable) {
            // 打印异常信息,帮助定位问题(比如网络问题、序列化错误)
            t.printStackTrace()
            Toast.makeText(applicationContext, "Error: ${t.message}", Toast.LENGTH_SHORT).show()
        }
    })
}

额外排查点

  • 确保你的AndroidManifest.xml里已经添加了网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 如果还是失败,可以在onFailure里打印异常栈信息,看看是网络连接问题、Gson序列化问题还是其他错误。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:56