如何在改造中实现复杂数据的POST requset 2

时间:2017-04-27 19:37:51

标签: android post retrofit2

我试图在Android应用程序中使用Retrofit 2实现以下curl请求(示例):

POST  https://176.67.241.133/server/rest/v1/bulletins
    -H "Content-Type: application/x-www-form-urlencoded"    
--data "access_token=4cad3a733af72e4daf6550c7ace1a3886637747a&data[passport]=2212696912&data[bulletins][0][bulletin_id]=1&data[bulletins][0][value]=122222222&data[bulletins][1][bulletin_id]=2&data[bulletins][1][value]=222222222"

可以通过以下代码在js中执行:

$.post('/server/rest/v1/bulletins',
   {
       access_token: '83126ef617d83ee8843f8d49d94ab59bd349cf6d',
       data: {
           passport: '2212696911',
           bulletins: [
               {bulletin_id: 1, value: '122222222'},
               {bulletin_id: 2, value: '222222222'}
           ]
       }
   },
   function (result) {
       $('#bulletin').html(JSON.stringify(result));
   });

我已经尝试了下面的代码,其中Voting是具有适当数据结构的json模型,但它被转换为错误的请求。

@FormUrlEncoded
@POST("/server/rest/v1/bulletins")
Observable<Object> postBulletins(@Field("access_token") String accessToken, @Field("data") Voting votingData);

请你帮忙写出正确的请求吗?

1 个答案:

答案 0 :(得分:1)

我认为问题是@Field注释应该与String对象一起使用。您可能应该将数据发布到pojo中并使用@Body注释发布它。我用http://pojo.sodhanalibrary.com/来生成快速的pojo。创建对象后,您可以使用

发布它
    @POST("/server/rest/v1/bulletins")
    Observable<Object> postBulletins(@Body YourPojoClassName 
    yourPojoClass);

你的pojo看起来像这样:

    public class YourPojoClassName{

        String access_token;
        Data data;

        public static class Data{

            int passport;
            Bulletins[] bulletins;

            public static class Bulletins{
                int bulletin_id;
                int value;
            }
        }
    }