【问题标题】:Retrofit POST request with a complex JSON使用复杂的 JSON 改造 POST 请求
【发布时间】: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 请求感到困惑。提前感谢您的帮助。

【问题讨论】:

    标签: android json gson retrofit pojo


    【解决方案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 类来处理响应吗?
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多