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

使用Retrofit请求reqres用户接口时firstName和lastName返回null如何解决

问题根源

你调用的https://reqres.in/api/users?page=2接口返回的JSON字段采用下划线命名规范:用户姓名字段为first_name、last_name,外层分页字段为per_page、total_pages。
而你定义的POJO类中对应属性采用小驼峰命名firstName、lastName、perPage、totalPages,Gson默认严格匹配字段名,命名不一致的字段无法完成序列化,因此返回null。email和avatar因为字段名和接口完全一致,所以可以正常读取。

解决方法

两种方案二选一即可:

方案1:为属性添加序列化注解

在POJO类中,给命名不匹配的属性加上@SerializedName注解,手动绑定接口返回的字段名:

// 外层pojo_for_users类
@SerializedName("per_page")
private Integer perPage;
@SerializedName("total_pages")
private Integer totalPages;

// 内部Datum类
@SerializedName("first_name")
private String firstName;
@SerializedName("last_name")
private String lastName;

方案2:配置Gson全局命名转换规则

修改Retrofit实例创建逻辑,配置Gson自动将下划线命名转换为小驼峰命名,不需要单独给每个字段加注解:

public static Retrofit get_retrofit_for_users(){
    if (retrofit1 == null){
        // 配置Gson命名策略
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create();
        retrofit1 = new retrofit2.Retrofit.Builder()
                .baseUrl(Base_url_fo_users)
                // 传入自定义配置的Gson实例
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
    }
    return retrofit1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:00