我是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请求很困惑。在此先感谢您的帮助。
答案 0 :(得分:5)
序列化时的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);
答案 1 :(得分:0)
使用GSON,无论你是将这些类设置为顶级还是内部,都没有区别,它在两种情况下都能正常工作。您的代码看起来很好,应该可以正常工作。