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

