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

Retrofit+Moshi发起POST请求时access_token缺失异常排查

排查 JsonDataException: Required value 'access_token' missing 问题的步骤

1. 核对响应实体类与接口返回JSON的匹配度

  • 确保RegisterDto里的access_token字段和Postman返回的JSON键名完全一致(大小写、下划线/驼峰都不能错)。如果接口返回的是"access_token",实体类写成accessToken的话,必须加@Json(name = "access_token")注解映射。
  • 检查字段的非空设置:如果接口允许access_token为空或不存在,实体类里要把该字段设为可空类型——Kotlin用val access_token: String?,Java去掉@NonNull注解。
  • 确认JSON层级:要是Postman返回的是嵌套结构(比如{"data": {"access_token": "xxx"}}),但RegisterDto直接定义了access_token,肯定会找不到字段,必须让实体类和JSON结构完全对应。

2. 检查Moshi配置是否生效

  • Retrofit构建时,MoshiConverterFactory要放在第一个转换器位置,避免被其他Converter干扰:
    Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(MoshiConverterFactory.create(moshiInstance))
        .client(okHttpClient)
        .build()
    
  • Kotlin项目必须添加Kotlin适配器,否则data class无法正常序列化/反序列化:
    val moshi = Moshi.Builder()
        .add(KotlinJsonAdapterFactory())
        .build()
    

3. 打印完整响应体验证实际返回数据

  • 给OkHttp加日志拦截器,直接看接口返回的原始JSON,确认是否真的包含access_token:
    val loggingInterceptor = HttpLoggingInterceptor().apply {
        level = HttpLoggingInterceptor.Level.BODY
    }
    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(loggingInterceptor)
        .build()
    
    看Logcat里的OkHttp标签日志,就能知道是接口返回数据不对,还是实体类解析错了。

4. 确认请求侧的序列化是否正常

  • 检查RegisterDataModel的字段是否和接口要求的参数名一致,同样注意大小写和注解。
  • 核对RegisterService的POST方法定义:@Body注解是否正确使用,请求URL、请求头(比如Content-Type)是否和Postman一致,避免请求发送失败后接口返回错误格式的响应。

5. 解决日志未打印的问题

  • 确保HttpLoggingInterceptor的level设为Level.BODY,且已添加到OkHttpClient中。
  • 检查Logcat的过滤条件,别把OkHttp标签的日志过滤掉了。
  • 确认AndroidManifest.xml里加了网络权限:<uses-permission android:name="android.permission.INTERNET" />。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:11:04