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

Android中使用Retrofit提交含父文档的子表数据及Model类构建

实现方案:Retrofit提交嵌套结构请求+匹配Model类

首先确认Postman中的请求结构:

{
        "address_line1": "Address Creation Test",
        "city": "Mumbai",
        "country": "India",
        "address_type": "Billing",
        "gst_state": "Maharashtra",
        "gst_state_number": "27",
        "is_primary_address": 0,
        "is_shipping_address": 0,
        "disabled": 0,
        "is_your_company_address": 0,
        "doctype": "Address",
        "links": [
            {
                "link_doctype": "Lead",
                "link_name": "CRM-LEAD-2023-00022"
            }
        ]
}

1. 创建匹配请求结构的Model类

Kotlin 版本

直接使用数据类匹配JSON字段,字段名需与请求结构完全一致:

data class AddressRequest(
    val address_line1: String,
    val city: String,
    val country: String,
    val address_type: String,
    val gst_state: String,
    val gst_state_number: String,
    val is_primary_address: Int,
    val is_shipping_address: Int,
    val disabled: Int,
    val is_your_company_address: Int,
    val doctype: String,
    val links: List<Link>
)

data class Link(
    val link_doctype: String,
    val link_name: String
)

Java 版本

可借助Lombok简化代码(需引入Lombok依赖),或手动实现getter/setter:

import lombok.Data;
import java.util.List;

@Data
public class AddressRequest {
    private String address_line1;
    private String city;
    private String country;
    private String address_type;
    private String gst_state;
    private String gst_state_number;
    private int is_primary_address;
    private int is_shipping_address;
    private int disabled;
    private int is_your_company_address;
    private String doctype;
    private List<Link> links;
}

@Data
public class Link {
    private String link_doctype;
    private String link_name;
}

2. 使用Retrofit提交请求

步骤1:添加Retrofit依赖

在Module级别的build.gradle中添加以下依赖:

dependencies {
    // Retrofit核心库
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    // Gson转换器,用于自动序列化/反序列化JSON
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

步骤2:创建Retrofit API接口

定义POST请求的接口方法,指定接口路径并传入AddressRequest作为请求体:

Kotlin 版本

import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.POST

interface AddressApi {
    @POST("your-api-endpoint") // 替换为实际的接口路径
    fun createAddress(@Body addressRequest: AddressRequest): Call<Void>
    // 若接口有响应数据,可将Void替换为对应的响应Model类
}

Java 版本

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

public interface AddressApi {
    @POST("your-api-endpoint")
    Call<Void> createAddress(@Body AddressRequest addressRequest);
}

步骤3:初始化Retrofit并发起请求

Kotlin 版本

import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

// 初始化Retrofit实例
val retrofit = Retrofit.Builder()
    .baseUrl("https://your-base-url.com/") // 替换为实际的基础URL
    .addConverterFactory(GsonConverterFactory.create())
    .build()

// 创建API服务实例
val addressApi = retrofit.create(AddressApi::class.java)

// 构造请求数据
val link = Link("Lead", "CRM-LEAD-2023-00022")
val addressRequest = AddressRequest(
    address_line1 = "Address Creation Test",
    city = "Mumbai",
    country = "India",
    address_type = "Billing",
    gst_state = "Maharashtra",
    gst_state_number = "27",
    is_primary_address = 0,
    is_shipping_address = 0,
    disabled = 0,
    is_your_company_address = 0,
    doctype = "Address",
    links = listOf(link)
)

// 发起异步请求
addressApi.createAddress(addressRequest).enqueue(object : Callback<Void> {
    override fun onResponse(call: Call<Void>, response: Response<Void>) {
        if (response.isSuccessful) {
            // 请求成功,执行后续逻辑(如Toast提示、页面跳转等)
        } else {
            // HTTP状态码非2xx,处理错误(如打印错误信息)
        }
    }

    override fun onFailure(call: Call<Void>, t: Throwable) {
        // 网络异常或请求失败,处理异常(如提示用户检查网络)
    }
})

Java 版本

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.util.ArrayList;
import java.util.List;

// 初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://your-base-url.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

AddressApi addressApi = retrofit.create(AddressApi.class);

// 构造请求数据
Link link = new Link("Lead", "CRM-LEAD-2023-00022");
List<Link> links = new ArrayList<>();
links.add(link);

AddressRequest addressRequest = new AddressRequest();
addressRequest.setAddress_line1("Address Creation Test");
addressRequest.setCity("Mumbai");
addressRequest.setCountry("India");
addressRequest.setAddress_type("Billing");
addressRequest.setGst_state("Maharashtra");
addressRequest.setGst_state_number("27");
addressRequest.setIs_primary_address(0);
addressRequest.setIs_shipping_address(0);
addressRequest.setDisabled(0);
addressRequest.setIs_your_company_address(0);
addressRequest.setDoctype("Address");
addressRequest.setLinks(links);

// 发起异步请求
addressApi.createAddress(addressRequest).enqueue(new Callback<Void>() {
    @Override
    public void onResponse(Call<Void> call, Response<Void> response) {
        if (response.isSuccessful()) {
            // 请求成功处理逻辑
        } else {
            // 请求失败处理逻辑
        }
    }

    @Override
    public void onFailure(Call<Void> call, Throwable t) {
        // 异常处理逻辑
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:45:35