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

Rest API在Android应用正常,Postman/Thunder Client返回400错误求因

问题:Retrofit2调用登录API正常,Postman/Thunder Client却返回400错误

和网上常见的「Postman能用但Java请求失败」问题反过来,我用Retrofit2在Android应用里调用登录接口(参数phone=123456,password=123456789)完全没问题,但用VSCode的Thunder Client扩展或者搭配Xampp的桌面版Postman调用时,一律返回Status: 400 Bad Request,甚至连登录表单的第一个字段都无法通过验证。

Retrofit2代码示例

@POST("http://localhost/myapp/index.php/auth/login")
ApiResponse<AuthResponse> login(@Body UserLogin userLogin);

相关截图说明

  • VSCode调用截图:显示400错误状态,提示登录表单第一个字段验证失败
  • Xampp详情截图:展示本地服务的运行状态

可能的成因

  • 请求格式不匹配:Retrofit2默认会把@Body注解的对象序列化为JSON格式发送,并且自动添加Content-Type: application/json请求头。如果在Postman/Thunder Client里用了表单格式(x-www-form-urlencoded)发送参数,或者没设置正确的Content-Type,后端会因为无法解析请求体返回400。
  • 参数名不一致:检查UserLogin类的字段是否和后端要求的完全匹配——比如Retrofit2可能用了@SerializedName注解映射了正确的字段名(比如后端要求mobile,但字段名是phone并加了注解),而你在Postman里直接输入了phone,导致后端识别不到参数。
  • 请求头缺失或不匹配:后端可能对请求头有特殊要求(比如特定的User-Agent、自定义标识等),Retrofit2的请求自动携带了这些头,但Postman/Thunder Client没配置,导致验证失败。
  • localhost地址的隐性差异:Android模拟器里的localhost指向模拟器自身,实际调用时可能用了电脑的局域网IP(比如192.168.x.x),而Postman里用localhost虽然能连接,但后端可能对请求来源做了校验,拒绝了非移动端的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:15