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

Android Studio中使用Retrofit出现Error 400的原因及代码问题排查求助

Retrofit Error 400问题分析及你的注册接口排查方案

问题1:Android Studio中使用Retrofit出现Error 400的常见原因

Error 400本质是客户端请求错误,服务器无法正常解析你的请求,常见诱因包括:

  • 参数不匹配:服务器期望的参数名称、数据类型和你传递的不一致,比如服务器要求user_name你传了username,或者需要整数类型的字段你传了字符串。
  • 缺失必填参数:服务器要求的必填字段你漏传了,比如注册接口必须传phone但你只提交了username、password、email。
  • 参数格式无效:比如邮箱格式不符合规范、密码长度未达要求,或者包含服务器不允许的特殊字符(比如换行、空格)。
  • 请求格式错误:服务器需要JSON格式的请求体,但你用了表单提交,或者Content-Type请求头设置错误。
  • 接口路径错误:请求的URL路径写错了,比如把/api/register写成了/api/login。

问题2:你的注册接口Error 400 + IllegalArgumentException排查

既然其他同学已经成功实现,那问题大概率出在你的代码细节里,而java.lang.IllegalArgumentException是非常关键的线索——这个异常在Retrofit中几乎都和接口定义、参数传递有关,建议按以下顺序排查:

1. 核对Retrofit接口的注解是否正确

先对比同学的接口代码,重点看这几点:

  • 请求方法是否匹配:服务器是POST请求,你不能用GET;
  • 参数注解是否正确:
    • 如果是JSON格式提交,要用@Body注解传递实体类,示例:
      @POST("api/register")
      Call<RegisterResponse> register(@Body RegisterRequest request);
      
    • 如果是表单提交,必须配合@FormUrlEncoded和@Field注解,示例:
      @FormUrlEncoded
      @POST("api/register")
      Call<RegisterResponse> register(
          @Field("username") String username,
          @Field("password") String password,
          @Field("email") String email
      );
      
  • 参数名称是否和服务器完全一致:比如服务器要求的是user_email,你不能写成email,差一个字符都会导致参数不被识别。

2. 检查传递的参数内容

调试时打印你从RegisterFragment获取的username、password、email值,确认:

  • 是否有空字符串、多余的空格或换行符?比如用户输入时不小心加了空格,你没做trim()处理;
  • 是否符合服务器的参数规则?比如密码要求6-16位,你输入了3位;邮箱格式是否正确(包含@和有效域名)。

3. 确认实体类(如果用@Body的话)的字段映射

如果是用实体类作为@Body参数,要确保实体类的字段和服务器的JSON键名一致:

  • 如果字段名和JSON键名不同,必须加@SerializedName注解,示例:
    public class RegisterRequest {
        @SerializedName("user_name")
        private String username;
        private String password;
        @SerializedName("user_email")
        private String email;
        // getter、setter方法
    }
    
  • 检查实体类有没有遗漏字段,或者字段类型错误(比如把密码写成int类型)。

4. 检查Retrofit实例的配置

确认你有没有添加正确的JSON转换器,比如GsonConverterFactory——如果没有这个,Retrofit无法把你的实体类转换成JSON格式的请求体,会直接抛出参数异常:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("你的服务器基础地址")
    .addConverterFactory(GsonConverterFactory.create()) // 这个配置不能少!
    .build();

5. 直接测试服务器接口

用Postman或者curl工具直接调用注册接口,传入正确的参数,看看能不能成功。如果工具调用成功,那肯定是你客户端代码的问题;如果工具调用也失败,那可能是服务器针对你的请求有特殊限制(比如IP拦截),但这种情况概率极低,毕竟其他同学能成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:32:58