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

Android开发:如何用Retrofit传递含多JSONObject的JSONArray及iaList处理

问题描述

我已经创建了包含iList、Uplift的主模型类及对应的子模型类,但不清楚如何处理iaList这个包含多个JSONObject的JSON数组,想请教如何通过Retrofit向API传递这样的结构。

对应的请求JSON结构如下:

{
    "iList": [
        {
            "ADDRESS1": "string",
            "CITY": "string",
            "COUNTRY": "string",
            "EMAIL_ADDRESS": "string",
            "FIRST_NAME": "string",
            "LAST_NAME": "string",
            "PRIMARY_PHONE_NUMBER": "string",
            "STATE_PROVINCE": "string",
            "ZIP_CODE": "string"
        }
    ],
    "iaList": [
        {
            "ATTRIBUTE_NAME": "string",
            "CUSTOM_PERMISSION": "string",
            "Id": "string",
            "GLOBAL_PERMISSION": "string"
        },
        {
            "ATTRIBUTE_NAME": "string",
            "CUSTOM_PERMISSION": "string",
            "Id": "string",
            "GLOBAL_PERMISSION": "string"
        },
        {
            "ATTRIBUTE_NAME": "string",
            "CUSTOM_PERMISSION": "string",
            "Id": "string",
            "GLOBAL_PERMISSION": "string"
        }
    ],
    "Uplift": [
        {
            "AGE": 0,
            "AUTOMOBILE": "string",
            "CHILD_AGES": "string",
            "DATE_OF_BIRTH": "string",
            "EDUCATION": "string",
            "GENDER": "string"
        }
    ]
}
解决方案

其实处理iaList和你处理iList、Uplift的逻辑完全一致,只是它包含多个对象而已,我一步步给你讲清楚:

1. 先创建iaList的子模型类

首先为iaList里的单个JSONObject创建对应的模型类,比如命名为IaItem,用Gson的注解确保字段和JSON键一一对应:

public class IaItem {
    @SerializedName("ATTRIBUTE_NAME")
    private String attributeName;
    
    @SerializedName("CUSTOM_PERMISSION")
    private String customPermission;
    
    @SerializedName("Id")
    private String id;
    
    @SerializedName("GLOBAL_PERMISSION")
    private String globalPermission;

    // 生成构造方法、getter和setter,也可以用Lombok简化代码
    public IaItem(String attributeName, String customPermission, String id, String globalPermission) {
        this.attributeName = attributeName;
        this.customPermission = customPermission;
        this.id = id;
        this.globalPermission = globalPermission;
    }

    // 按需添加getter和setter方法
}

2. 在主模型类中添加iaList字段

在你已经创建的主模型类(比如叫MainRequestModel)里,把iaList定义为List<IaItem>类型,和另外两个数组字段保持一致:

public class MainRequestModel {
    @SerializedName("iList")
    private List<IListItem> iList; // 你已创建的iList子模型
    
    @SerializedName("iaList")
    private List<IaItem> iaList; // 新增的iaList字段
    
    @SerializedName("Uplift")
    private List<UpliftItem> uplift; // 你已创建的Uplift子模型

    // 构造方法、getter/setter
    public MainRequestModel(List<IListItem> iList, List<IaItem> iaList, List<UpliftItem> uplift) {
        this.iList = iList;
        this.iaList = iaList;
        this.uplift = uplift;
    }
}

3. 定义Retrofit接口

在你的Retrofit服务接口中,定义一个POST请求,参数类型为主模型类,Retrofit会自动将其序列化为符合要求的JSON结构:

public interface ApiService {
    @POST("your-api-endpoint-path")
    Call<ResponseBody> submitRequestData(@Body MainRequestModel requestModel);
}

4. 构建请求并发起调用

接下来创建多个IaItem对象,把它们存入List,再传入主模型,最后发起Retrofit请求即可:

// 创建iaList的多个条目
List<IaItem> iaItems = new ArrayList<>();
iaItems.add(new IaItem("user_type", "read", "attr_001", "full_access"));
iaItems.add(new IaItem("payment_level", "write", "attr_002", "limited_access"));
iaItems.add(new IaItem("notification_setting", "read_write", "attr_003", "full_access"));

// 构建另外两个列表(iList和Uplift),这里假设你已经会处理这部分
List<IListItem> iList = ...;
List<UpliftItem> upliftList = ...;

// 组装主请求模型
MainRequestModel requestModel = new MainRequestModel(iList, iaItems, upliftList);

// 发起Retrofit请求
ApiService apiService = RetrofitClient.getInstance().create(ApiService.class);
Call<ResponseBody> call = apiService.submitRequestData(requestModel);
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        // 处理成功响应逻辑
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        // 处理请求失败逻辑
    }
});

关键注意点

  • 确保你的Retrofit实例已经配置了JSON转换器(比如Gson),否则无法完成模型到JSON的序列化:
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://your-base-api-url.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();
  • 如果你的模型字段名和JSON键名完全一致,也可以不用@SerializedName注解,但建议加上,避免因为大小写或命名规范差异导致序列化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:57:59