使用复杂的 JSON 改造 POST 请求
Posted
技术标签:
【中文标题】使用复杂的 JSON 改造 POST 请求【英文标题】:Retrofit POST request with a complex JSON 【发布时间】:2015-05-09 14:10:12 【问题描述】:我是 Retrofit 的新手,正在尝试使用 Retrofit 发出 POST 请求。我的 POST 请求的主体是复杂的 JSON,如下所示:
有效载荷:
"user":
"personal_info":
"first_name": "Walter",
"last_name": "White",
"date_of_birth": "1972-01-03 00:00:00 PST"
,
"address_info":
"address_1": "308 NEGRA ARROYO LANE",
"address_2": "#",
"city": "ALBUQUERQUE",
"state": "NM",
"zip_code": "87104"
,
"contact_info":
"email": "wwhite@test.com",
"telephone": "88888888888",
"telephone_type_id": 1
,
"employment_info":
"employer_name": "SELF",
"employment_status_id": 7,
"annual_income": 9000000000000000,
"monthly_income": 750000000000,
"employment_start_year": 0,
"employment_start_month": 0
我将接口定义为
@POST("/users")
void registerUser(@Body User User, Callback<User> cb);
我不确定我的 User 类应该是什么样子,我希望有效负载与上面提到的相同,到目前为止我的 User 类为
public class User
@SerializedName("personal_info")
private PersonalInfo personalInfo;
@SerializedName("address_info")
private AddressInfo addressInfo;
@SerializedName("contact_info")
private ContactInfo contactInfo;
@SerializedName("employment_info")
private EmploymentInfo employmentInfo;
我不确定 Personalinfo、ContactInfo 等是否应该是具有 JSON 请求中提到的所有字段的单独类,还是应该将它们作为 User 类中的内部类以及如何使用 User 类进行 Retrofit 调用。服务器响应与上面提到的 JSON 请求完全相似,带有 1 个附加字段,即用户 ID。我已准备好 POJO 类以获取响应。
我对如何发出 POST 请求感到困惑。提前感谢您的帮助。
【问题讨论】:
【参考方案1】:序列化后的User
对象将具有此 JSON 表示:
"personal_info":
"first_name": "Walter",
"last_name": "White",
"date_of_birth": "1972-01-03 00:00:00 PST"
,
"address_info":
"address_1": "308 NEGRA ARROYO LANE",
"address_2": "#",
"city": "ALBUQUERQUE",
"state": "NM",
"zip_code": "87104"
,
"contact_info":
"email": "wwhite@test.com",
"telephone": "88888888888",
"telephone_type_id": 1
,
"employment_info":
"employer_name": "SELF",
"employment_status_id": 7,
"annual_income": 9000000000000000,
"monthly_income": 750000000000,
"employment_start_year": 0,
"employment_start_month": 0
为了构建问题中指出的有效负载,您需要另一个类:
public class UserRequest
@SerializedName("user")
private User user;
并在使用 Retrofit 执行请求时使用它:
@POST("/users")
void registerUser(@Body UserRequest User, Callback<User> cb);
【讨论】:
谢谢,正如我提到的,服务器响应与上面提到的请求完全相同。是否可以使用相同的模型类来解析服务器响应,或者我应该为响应设置单独的模型类。 拜托,你能告诉我如何写用户类(我的用户类是这个公共类用户公共字符串标题=“发送报告”;公共字符串时间戳=“02072015123700”;公共字符串类型= "Image"; int FilesNumber = 1; ) ,是对还是错,以及如何编写回调(我在回调中取回json),提前谢谢 @RajanMaurya 你应该为此提出一个新问题。【参考方案2】:使用 GSON,无论您将这些类设置为***类还是内部类都没有区别,它在这两种情况下都可以正常工作。您的代码看起来不错,应该可以正常工作。
【讨论】:
我可以使用同一个 POJO 类来处理响应吗?以上是关于使用复杂的 JSON 改造 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?
改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul