我该如何在retrofit的POST请求中发送对象数组?

5
服务器期望接收类似以下内容的数据:
special_array = [{param1 = "string1", param2 = "string2"}, {param1 = "string3", param2 = "string4"}];

我需要制作自己的转换器吗?
2个回答

4

首先创建如下的回调接口,并传递整个Object类。

 @POST(URL)
 public void newObject(@Body YourObject object, Callback<Boolean> success);

Retrofit默认使用Gson来序列化和反序列化JSON。例如,如果你的Object类看起来像这样:
public class YourObject {

@Expose
private String param1;
@Expose
private String param2;

/**
* 
* @return
* The param1
*/
public String getParam1() {
return param1;
}

/**
* 
* @param param1
* The param1
*/
public void setParam1(String param1) {
this.param1 = param1;
}

/**
* 
* @return
* The param2
*/
public String getParam2() {
return param2;
}

/**
* 
* @param param2
* The param2
*/
public void setParam2(String param2) {
this.param2 = param2;
}

}

然后Gson会自动将其序列化为以下JSON:
[
    {
        "param1": "string1",
        "param2": "string2"
    },
    {
        "param1": "string3",
        "param2": "string4"
    }
]

您已经完成了所有操作!


太好了,但是如果我有其他参数,除了对象数组,我还能使用@Body吗? - sorinLates
是的,你可以。只需在逗号后面添加任何其他参数/附件。例如 @POST(URL) public void newObject(@Body Object object, @Part("content") String content, Callback<Boolean> success); - Prokash Sarkar
2
@Body参数不能与表单或多部分编码一起使用。 - sorinLates
给你的类命名为Object并不是一个好主意。 - njzk2
1
此外,期望的 body 显然是一个对象列表,而不仅仅是一个对象。 - njzk2

0

我刚刚不得不构建一个更大更复杂的对象,考虑到两个参数,就像这样:

ComplexRequestObject complexRequestObject = new ComplexRequestObject();
complexRequestObject.param1 = new SemiComplexObject[]{
    new SemiComplexObject("value1", "valued2")};
complexRequestObject.param2 = "value3";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接