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

Kotlin应用通过Retrofit向Django Rest Framework提交POST请求无数据

解决Retrofit POST请求DRF未接收数据的问题

以下是几个直接的排查和解决方向:

  • 添加请求日志拦截器,确认实际发送内容
    用OkHttp的日志拦截器查看完整请求详情,确认mobile参数是否真的被发送。代码示例:

    // 先添加依赖:implementation "com.squareup.okhttp3:logging-interceptor:4.11.0"
    val loggingInterceptor = HttpLoggingInterceptor().apply {
        level = HttpLoggingInterceptor.Level.BODY
    }
    
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(loggingInterceptor)
        .build()
    
    // 构建Retrofit时使用这个client
    val retrofit = Retrofit.Builder()
        .baseUrl("你的服务器基础地址")
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(CoroutineCallAdapterFactory())
        .build()
    

    查看Logcat里的请求体,确认是否包含mobile=xxx的内容。

  • 检查Retrofit实例配置
    确保Retrofit添加了正确的转换器和协程适配器,缺少GsonConverterFactory可能导致请求/响应处理异常,缺少CoroutineCallAdapterFactory会导致suspend函数无法正常执行。

  • 验证参数传递是否有效
    调用RegisterRequest方法时,确认传入的mobile不是空字符串或null。比如检查用户输入的手机号是否正确获取,避免传空值导致后端无数据。

  • 排查请求头冲突
    @FormUrlEncoded会自动设置Content-Type: application/x-www-form-urlencoded,不要手动添加其他Content-Type头(比如application/json),否则会导致后端无法解析表单数据。

  • 检查后端字段匹配
    确认DRF接口接收的字段名是mobile(全小写),和代码里@Field("mobile")的参数名完全一致,大小写不匹配会导致后端无法识别参数。

  • 尝试调整请求路径
    代码里的@POST("v1/register/")带末尾斜杠,试试去掉斜杠改为@POST("v1/register"),避免后端重定向丢失请求体(虽然Postman正常,但部分情况下重定向会影响POST请求)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:55:47