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

使用Retrofit请求API部分非空参数返回null、Postman正常如何解决

问题解决方案

1. 先确认Retrofit拿到的原始响应和Postman一致

你需要先添加OkHttp日志拦截器,打印完整的响应报文,排除请求头、参数差异导致服务端返回不同内容的情况:

  • 首先引入日志拦截器依赖(module层级的build.gradle):
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
  • 修改OkHttpClient配置,添加日志拦截器:
val logInterceptor = HttpLoggingInterceptor().apply {
    level = HttpLoggingInterceptor.Level.BODY
}
val client1 = OkHttpClient.Builder()
    .addInterceptor(logInterceptor)
    .addInterceptor(SigningInterceptor(consumer))
    .build()

运行后查看Logcat的响应体,和Postman返回的内容对比,如果内容不一致,优先排查请求头、参数的差异。

2. 处理JSON字段名与模型类字段不匹配的问题

这是此类问题最常见的诱因:默认Gson是严格匹配字段名的,如果接口返回的是下划线命名(如generated_at、preview_url_42),而你的模型类用的是驼峰命名,就会解析失败返回null。

解决方法二选一:

  • 方案1:给模型类字段加@SerializedName注解,显式指定对应JSON字段名:
public class ApiData{
    private int total;
    @SerializedName("generated_at")
    private String generatedAt;
    private Collection collection;
    private List<IconsItem> icons;
    // 其余代码不变
}

IconsItem等其余实体类的字段同理,逐个匹配接口返回的字段名添加注解。

  • 方案2:全局配置Gson的字段命名转换策略,自动把下划线命名转驼峰:
    修改Retrofit初始化时的Gson配置:
val gson = GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .create()
var retrofit : Retrofit = Retrofit.Builder()
    .baseUrl(BaseUrl)
    .client(client1)
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build()

该方案无需逐个给字段加注解,适合整体都是下划线转驼峰的场景。

3. 检查混淆配置

如果你开启了代码混淆(R8/ProGuard),需要在proguard-rules.pro中添加实体类的保活规则,避免字段名被混淆后无法匹配JSON字段:

-keep class 你的实体类所在包名.** { *; }
# 配套添加Gson通用混淆规则
-keep class com.google.gson.** {*;}
-keepnames class * implements java.io.Serializable
-keepattributes Signature
-keepattributes *Annotation*

4. 校验字段类型匹配

检查模型类字段的类型是否和接口返回的一致:

  • 如接口返回的布尔类型字段(true/false)不要定义为String类型
  • 可能为空的数值类型不要用基础类型(如int、long),改用包装类型(Integer、Long),避免解析失败赋值为默认值
  • 复杂对象类型(如Sponsor、Uploader)的内部字段也要按上述规则检查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:03