需要Java中关联数组的HTTP发布

时间:2018-07-22 07:36:04

标签: java arrays api http associative-array

我正在尝试在Java中对需要关联数组的HTTP Post进行API调用,在我的情况下,该数组为'$ range',请参见下文。

我能够使用以下代码使用PHP成功拨打电话:

//THIS WORKS - IN PHP

$url = 'http://demo.com/ajax/otherVariables/getMetrics';

$range = array(
    'from' => '06/22/2018 00:00',
    'to' => '07/21/2018 23:59',
    'timezone' => 'US/Eastern'
);

$postData = array(
    '_e662555' => $hash,
    'range' => $range,
    'camps' => 10001,
    'key' => 'custom.w'
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));

$result = curl_exec($ch);

curl_close($ch);

我一直在尝试使用Java中的HashMap和Unirest做到这一点,但没有任何运气。

//THIS DOESNT WORK - IN JAVA

Map<String, String> range = new HashMap<String, String>();
range.put("from", "06/22/2018 00:00");
range.put("to", "07/21/2018 23:59");
range.put("timezone", "US/Eastern");

Map<String, Object> fields = new HashMap<String, Object>();
fields.put("_e662555", token);
fields.put("range", range);
fields.put("camps", 10001);
fields.put("key", "custom.w");

HttpResponse<JsonNode> response = Unirest.post("http://demo.com/ajax/otherVariables/getMetrics")
        .fields(fields)
        .asJson();

System.out.println(response.getBody());

我认为问题在于关联数组。似乎并不想像PHP处理其关联数组那样处理HashMap。

我尝试使用数组数组:

String[] from = {"from","06/22/2018 00:00"};
String[] to = {"to","07/21/2018 23:59"};
String[] timezone = {"timezone","US/Eastern"};
String[][] range = {from,to,timezone};

还尝试了包含键值对象的列表

List<Range> range = new ArrayList<Range>();
range.add(new Range("from","06/22/2018 00:00"));
range.add(new Range("to","07/21/2018 23:59"));
range.add(new Range("timezone","US/Eastern"));

class Range{
public String key,value;

public Range(String key, String value){
    this.key = key;
    this.value = value;
}

没有运气。

如上所述,我认为问题在于关联数组。我们只需要它具有与PHP中相同的行为,但仅限于JAVA中。

有人知道我们如何做到这一点吗?我愿意使用任何库或任何其他解决方案。

1 个答案:

答案 0 :(得分:0)

在使用邮递员进行了大量测试后,我发现了这一点。

这是使用更复杂数组的任何人所需要的语法

HttpResponse<JsonNode> response = Unirest.post("http://demo.com/ajax/otherVariables/getMetrics")
                  .field("_e662555",token)
                  .field("range[from]","06/22/2018 00:00")
                  .field("range[to]","07/21/2018 23:59")
                  .field("range[timezone]","US/Eastern")
                  .field("camps",10001)
                  .field("key","custom.w")
                  .asJson();