如何使用REST将数组作为POST参数/有效负载发送到Android中的Web服务

时间:2014-10-17 04:48:00

标签: java android web-services rest

我在我的网络服务中使用REST。这是我使用advance rest client测试我的网络服务时发送的示例有效负载/参数,form content type(这是RAW类型):

child_id%5B%5D=1&user_id=15&group_id=1&custom=&time=17%3A17%3A00&date=&child_id%5B%5D=2

RAW中的child_id%5B%5D表示表单中的child_id[],因此我发送array child_idform以上最左侧和最右侧) 。这里的事情很好。

当我尝试将此实现到Android应用程序时出现问题,其中我使用HashMap POST这些有效负载/参数。 HashMap cant 在同一个密钥下存储两个值,因此我无法执行以下操作:

map.put("child_id[]", 1);
map.put("child_id[]", 2);

最新的put会覆盖之前的put,因此Android应用只会发送2作为child_id的值。

我该怎么办?谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

您可以按如下方式向数组添加索引。

map.put("child_id[0]", 1);
map.put("child_id[1]", 2);

答案 1 :(得分:1)

你有几个选择来解决这个问题。最简单的方法是创建一个类作为参数的容器,并将它们存储在ArrayList

public class Parameter {
    private String key;
    private String value;
    // Getters, setters, other stuff.
}

然后将其存储在ArrayList

您还可以使一个类充当各种参数构建器。你可能会这样做:

public class Parameters {
    private ArrayList<String> keys = new ArrayList<>();
    private ArrayList<String> values = new ArrayList<>();

    public void add(String key, String value) { ... }
    public ArrayList<String> getKeys() { ... }
    public ArrayList<String> getValues() { ... }
}

第二个选项需要更多代码,但增加了一些额外的灵活性,应该可以提供更清晰的API。

或者,正如您在自己的评论中提到的,您可以选择使用Map<String, ArrayList<String>>。在上面的例子中,这也可以很好地代替ArrayList