android - 使用复杂的 JSON 改造 POST 请求

标签 android json gson retrofit pojo

我是 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
        }
      }
    }

我将接口(interface)定义为

    @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 请求感到困惑。在此先感谢您的帮助。

最佳答案

序列化后的 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);

关于android - 使用复杂的 JSON 改造 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28924746/

相关文章:

json - 在 mule 中跳过 json 中的 null

java - 在 gson 序列化期间动态排除某些属性 (Java)

android - ViewModelFactory无法正确实例化ViewModel

android - 在改造 2.0.2 中尝试将图像上传到服务器时出现 EOF 异常

android - ImageAdapter 和 ListView (java.lang.OutOfMemoryError : bitmap size exceeds VM budget)

android - 如何覆盖 Android 键盘上的语音输入键?

javascript - 调用 javascript 对象值给我 'undefined'

ios - 在 AFJSONRequestOperation 中接受无效的 JSON?

android - 在 Kotlin 中使用 Gson 解析 JSON 数组

spring - 在使用GsonHttpMessageConverter之前在Spring中配置Gson