我正在尝试在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中。
有人知道我们如何做到这一点吗?我愿意使用任何库或任何其他解决方案。
答案 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();