使用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
相关产品推荐
相关产品推荐

